2014-01-05 144 views
0

嗨,我非常喜欢初学者。作为变量调用方法的命名方法Ruby

我想我明白attr_accessor是如何工作的(下图)。 “setter”是name=(name)方法。我知道那个方法相当于这个任务:name = "john"。因为“=”是接受参数并将该参数分配给任何对象调用它的方法。 (虽然我不知道如何“名”可以考虑的对象,因为它被分配到一个对象)

所以我的问题是:你怎么可以指定一个变量调用一个方法,一个方法叫什么名字?这感觉就像我失去了一些东西..

class Person 
    def name 
    @name 
    end 

    def name=(name) 
    @name = name 
    end 
end 
+0

目前还不清楚你在问什么。你只是问如何使用你的'name ='方法? – meagar

+0

感谢您的回复。我认为name =实际上是一个变量“name”,用“string”参数调用方法“=”。这是如何被允许作为方法名称本身? –

+0

错误,不,该方法本身被称为'name ='。这就是Ruby如何表示setter方法。 – meagar

回答

1

所以我的问题是:你怎么可以指定一个变量调用一个方法作为 方法的名字吗?这感觉就像我失去了一些东西..

你不知道。在此代码

def name=(name) 
    @name = name 
end 

name=不是可变name调用方法=。该方法的名称name=

编辑:

在上述代码段与终止end配对的def构成的方法的定义。

def method_name(param1, param2) 
    # method body 
end 

在同一行def只能有方法名,可选圆括号和帕拉姆列表。根据定义,在该行中有一个“变量调用方法”将是非法的。所以在你的代码name=是方法名称。

+0

为什么如果我写这段代码“object.name =”tim“它最终会调用这个方法吗? –

+0

它只是语法糖。等号前面的空格被忽略,并调用方法'name =' – jcm

+0

i理解这一点,但我仍然不明白为什么“name =”会调用名称为“name =”的方法,而不是试图在名称上调用方法“=”,因为范围而不起作用。是否当我输入object.name。=(“tim”)是给我打字的结果object.name =(“tim”)。我会尝试写在另一个盒子里更清晰 –