Ruby 方法定义中的等号 | 珊瑚贝

Equal sign in Ruby method definition

本问题已经有最佳答案,请猛点这里访问。


我遇到了以下方法定义,想知道第一个和第二个定义的区别。

定义中第一个没有等号:

1
2
3
 def name
   display_name(:name)
 end

这一秒有等号:

1
2
3
4
5
6
7
8
9
10
11
12
 def name=(new_name)
   if! self[:real_name]
     self[:real_name] = new_name
     gera_name_exhibition
   else
     if new_name.is_a? Hash
       self[:name] = new_name.sort.map {| b | b [1]} .join ()
     else
       self[:name] = new_name
     end
   end
 end
  • 这是两个不同的方法,name 和 name=,getter 和 setter。这就是区别。
  • JFYI,这段代码中的间距是……不寻常的。您可能想浏览一下 ruby?? 样式指南。
  • 谢谢我更新了间距。当我复制和粘贴时,它只是带有那个空间。
  • 另请参阅stackoverflow.com/q/5398919/244128
  • 你知道 Ruby 中的方法定义是什么样的吗?


第一个是声明 :name 变量的 getter。第二个是为 :name 变量声明一个设置器。那里还有其他行为。

这是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class GSExample
  def name
    @name
  end

  def name=(val)
    @name = val
  end
end

e = GSExample.new
puts e.name
# => nil

e.name = ‘dave’
puts e.name
# => dave

在上面你可以看到 @name 是一个实例变量,它被用作方法 name 的 getter 和方法 name= 的 setter。等号是 setter 的 ruby?? 约定(我们很容易不做 setter,但这是不好的做法。)

通常是吸气剂

  • 你说的这个”:name 变量”是什么?
  • 好吧,您的方法正在使用散列来存储变量。这就是 self[:name] 是什么。而且您的两种方法似乎正在访问键 :name 引用的数据(您的问题中缺少信息,所以我在做假设)


来源:https://www.codenong.com/47994984/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?