与Ruby访问器方法混淆

时间:2012-03-26 04:52:37

标签: ruby class syntax accessor

我真的很困惑如何在Ruby类中命名方法名称。如果我创建一个访问者,如: attr_accessor:name

它创建方法: 名称 和 名称=

但当我用'name'和'='之间的空格调用第二个方法时,它可以工作

'n .name ='和'n.name ='都有效。

我在某处读到Ruby忽略了空格。那么,当我用空格调用它时,为什么我编写的方法不起作用?

def getname 端

如果我这样打电话,它就不起作用了。为什么? t.get name

我并不感到惊讶,因为它不起作用。但我很困惑setter方法(name =)如何工作呢?

提前谢谢。

2 个答案:

答案 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'相同。 希望有所帮助