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