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) e = GSExample.new e.name = ‘dave’ |
在上面你可以看到 @name 是一个实例变量,它被用作方法 name 的 getter 和方法 name= 的 setter。等号是 setter 的 ruby?? 约定(我们很容易不做 setter,但这是不好的做法。)
通常是吸气剂
- 你说的这个”:name 变量”是什么?
- 好吧,您的方法正在使用散列来存储变量。这就是 self[:name] 是什么。而且您的两种方法似乎正在访问键 :name 引用的数据(您的问题中缺少信息,所以我在做假设)
来源:https://www.codenong.com/47994984/