与Ruby访问器方法混淆

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

它会创建方法:name和name =

但是当我使用'name'和'='之间的空格来调用第二个方法时,它会起作用

'n.name ='和'n.name ='都可以。

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

def getname结束

如果我以这种方式调用,它不起作用。 为什么? t.get名称

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

提前致谢。


安装者在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= name=直接调用setter name=

n.name =正在使用setter的这种特殊处理方式,因为它以an =结尾,以便您可以在赋值中将它用作左值(即它可以出现在左侧)。


getName是方法的名称,所以你不能有空格,因为它认为它是两个方法或一个参数,这就是为什么我们要使它可读的情况。 但等号是一个操作数,并且可以有空格。 它与“2 + 2”和“2 + 2”相同。 希望有所帮助

链接地址: http://www.djcxy.com/p/95435.html

上一篇: confused with Ruby accessor methods

下一篇: Prevent duplicate objects in Ruby