我正在用Ruby编写我的第一个应用程序,我有一个问题。
以下是一个示例:
class SomeClass
def initialize(host)
@host = host
end
end
如何在其他方法中更改@host的值?我试过用
self.host = "somenewvalue"
但这不起作用。
答案 0 :(得分:3)
使用attr_accessor:
class SomeClass
attr_accessor :host
def initialize(host)
@host = host
end
end
或attr_reader和attr_writer分别定义方法host(getter)和host =(setter)。
UPD :弄错了。您可以通过在变量名称前面添加@来访问实例变量。因此,实例方法中的@ host =“someothervalue”可以正常工作。
答案 1 :(得分:1)
这是因为self.host = 'somenewvalue'
实际上以host=
为self
作为参数调用'somenewvalue'
元词。由于未定义该方法,因此将引发错误。
要解决此问题,只需定义方法:
def host=(new_host)
@host = new_host.to_s
end
您还可以编写attr_writer :host
,它定义了与上述类似的方法。 attr_accessor
定义了reader和writer方法。