我真的很困惑如何在Ruby类中命名方法名称。如果我创建一个访问者,如: attr_accessor:name
它创建方法: 名称 和 名称=
但当我用'name'和'='之间的空格调用第二个方法时,它可以工作
'n .name ='和'n.name ='都有效。
我在某处读到Ruby忽略了空格。那么,当我用空格调用它时,为什么我编写的方法不起作用?
def getname 端
如果我这样打电话,它就不起作用了。为什么? t.get name
我并不感到惊讶,因为它不起作用。但我很困惑setter方法(name =)如何工作呢?
提前谢谢。答案 0 :(得分:3)
Setter在Ruby中很特别。
事实上,定义以等号结尾的方法名称使该名称有资格出现在作业的左侧。
来自http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
分配在Ruby中定义为:
赋值语句在其左侧(左值)设置变量或属性以引用右侧的值(右值)。
来自http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html
因此n.name=
直接调用了setter name=
。
n.name =
正在使用这种特殊处理方式,因为它以=
结尾,以便你可以将它用作左值(也就是说,它可以出现在左侧)在作业中。
答案 1 :(得分:1)
getName是方法的名称,因此你不能拥有空格,因为它认为它是两个方法或者可能是一个参数,这就是为什么我们可以使它变得可读。但等号是一个操作数,周围可以有空格。它与'2 + 2'和'2 + 2'相同。 希望有所帮助