Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将方法命名为变量调用Ruby方法_Ruby_Attr Accessor - Fatal编程技术网

将方法命名为变量调用Ruby方法

将方法命名为变量调用Ruby方法,ruby,attr-accessor,Ruby,Attr Accessor,嗨,我是个初学者 我想我了解attr_访问器是如何工作的(见下文)。“setter”是name=(name)方法。我知道这个方法相当于赋值:name=“john”。因为“=”是一个方法,它接受一个参数并将该参数分配给调用它的任何对象。(虽然我不明白“名称”如何被视为一个对象,因为它被分配给一个对象) 所以我的问题是:如何分配调用方法的变量作为方法名?感觉好像我错过了什么 class Person def name @name end def name=(name)

嗨,我是个初学者

我想我了解attr_访问器是如何工作的(见下文)。“setter”是
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