Ruby有一个this.var =“somevalue”功能吗?

时间:2012-07-11 10:22:31

标签: ruby

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

以下是一个示例:

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

如何在其他方法中更改@host的值?我试过用 self.host = "somenewvalue"但这不起作用。

2 个答案:

答案 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方法。