将方法命名为变量调用Ruby方法
嗨,我是个初学者 我想我了解attr_访问器是如何工作的(见下文)。“setter”是将方法命名为变量调用Ruby方法,ruby,attr-accessor,Ruby,Attr Accessor,嗨,我是个初学者 我想我了解attr_访问器是如何工作的(见下文)。“setter”是name=(name)方法。我知道这个方法相当于赋值:name=“john”。因为“=”是一个方法,它接受一个参数并将该参数分配给调用它的任何对象。(虽然我不明白“名称”如何被视为一个对象,因为它被分配给一个对象) 所以我的问题是:如何分配调用方法的变量作为方法名?感觉好像我错过了什么 class Person def name @name end def name=(name)
name=(name)
方法。我知道这个方法相当于赋值:name=“john”
。因为“=”是一个方法,它接受一个参数并将该参数分配给调用它的任何对象。(虽然我不明白“名称”如何被视为一个对象,因为它被分配给一个对象)
所以我的问题是:如何分配调用方法的变量作为方法名?感觉好像我错过了什么
class Person
def name
@name
end
def name=(name)
@name = name
end
end
所以我的问题是:如何将调用方法的变量指定为
方法名?感觉好像我错过了什么
class Person
def name
@name
end
def name=(name)
@name = name
end
end
你没有。在此代码中
def name=(name)
@name = name
end
name=
不是调用方法的变量name
。方法的名称是name=
编辑:
在上面的代码段中,def
与终止的end
一起构成方法定义
def method_name(param1, param2)
# method body
end
在与
def
相同的行中,只能有方法名称、可选括号和参数列表。根据定义,在该行中使用“变量调用方法”是非法的。所以在你的代码中,name=
是方法名。不清楚你在问什么。你只是在问如何使用你的name=
方法吗?谢谢你的回复。我认为name=实际上是一个变量“name”,用一个“string”参数调用方法“=”对吗。如何将其作为方法名称本身?错误,不,该方法本身被称为name=
。这就是Ruby表示setter方法的方式。这些方法可能会有帮助:谢谢,第一个链接真的很有帮助。那么为什么我要编写代码“object.name=”tim“它最终会调用那个方法吗?它只是语法上的糖分。”。等号前的空格被忽略,方法name=
被调用。我理解这一点。但我仍然不明白为什么“name=”会调用名为“name=”的方法,而不是尝试调用name上的方法“=”。因为范围太广,所以不起作用。那么为什么在我键入object.name=(“tim”)时会出现这种情况呢?这就是我键入object.name=(“tim”)的结果吗。我要试着在另一个盒子里写得更清楚对不起,我试过别的东西。我看到那个对象。name.=(“tim”)不起作用。但是,5.+(5)确实有效。“=”和“+”在这方面不一样吗?不,在对象中。name=“time”
注意,name
和=
之间没有点。这是因为方法是name=
。在5.+(1)
中,调用5
上的方法+
,传递参数1
。