0

我正在用 Ruby 编写我的第一个应用程序,我有一个问题。

这是一个示例:

 class SomeClass
    def initialize(host)
       @host = host
    end
end

如何在另一种方法中更改 @host 的值?我尝试过使用 self.host = "somenewvalue",但这不起作用。

4

2 回答 2

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" 可以正常工作。

于 2012-07-11T10:24:45.870 回答
1

那是因为self.host = 'somenewvalue'实际上是host=self作为'somenewvalue'参数调用方法。由于未定义方法,因此将引发错误。

要解决这个问题,只需定义方法:

def host=(new_host)
  @host = new_host.to_s
end

你也可以写attr_writer :host,它定义了一个类似上面的方法。attr_accessor定义了 reader 和 writer 方法。

于 2012-07-11T11:43:55.420 回答