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リーダーとライターの両方のメソッドを定義します。

于 2012-07-11T11:43:55.420 に答える