我正在用 Ruby 编写我的第一个应用程序,我有一个问题。
这是一个示例:
class SomeClass
def initialize(host)
@host = host
end
end
如何在另一种方法中更改 @host 的值?我尝试过使用
self.host = "somenewvalue"
,但这不起作用。
我正在用 Ruby 编写我的第一个应用程序,我有一个问题。
这是一个示例:
class SomeClass
def initialize(host)
@host = host
end
end
如何在另一种方法中更改 @host 的值?我尝试过使用
self.host = "somenewvalue"
,但这不起作用。
使用 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" 可以正常工作。
那是因为self.host = 'somenewvalue'
实际上是host=
用self
作为'somenewvalue'
参数调用方法。由于未定义方法,因此将引发错误。
要解决这个问题,只需定义方法:
def host=(new_host)
@host = new_host.to_s
end
你也可以写attr_writer :host
,它定义了一个类似上面的方法。attr_accessor
定义了 reader 和 writer 方法。