インスタンス変数に特定の値を割り当てた場合、この変数の値を再割り当てするメソッドを定義するにはどうすればよいですか? 以下のコードを で実行するとrspec
、元の値が取得され続けます。
class Test
def name
@name = 'me'
end
def name=(input)
@name = input
end
end
インスタンス変数に特定の値を割り当てた場合、この変数の値を再割り当てするメソッドを定義するにはどうすればよいですか? 以下のコードを で実行するとrspec
、元の値が取得され続けます。
class Test
def name
@name = 'me'
end
def name=(input)
@name = input
end
end
def name
@name = 'me'
end
上記のメソッドを呼び出すたびに、に設定@name
し'me'
て返します。
||=
オペレーターをお探しだと思います
def name
@name ||= 'me' # only set @name to 'me' if it is not already set
end
IMO、デフォルト値を達成するための最良の方法@name
は次のとおりです。
class Test
attr_accessor :name
def initialize
@name = 'me'
end
end
例:
t = Test.new
t.name
# => "me"
t.name = 'foo'
# => "foo"
t.name
# => "foo"
ゲッターで変数を設定しているので、@name
変数を返すだけです。そのようです:
class Test
def name
@name
end
def name=(input)
@name = input
end
end
または、もっと簡単に言うと、このattr_accessor
メソッドを使用して、getterメソッドとsetterメソッドのボイラープレートバージョンを宣言する必要があります。そのようです:
class Test
attr_accessor :name
end
初期値はコンストラクタメソッドで設定する必要があります。
class Test
def initialize
@name = 'me'
end
def name
@name
end
def name=(input)
@name = input
end
end
そして、あなたはattr_accessor
あなたのコードを単純にするために使うことができます:
class Test
attr_accessor :name
def initialize
@name = 'me'
end
end