-2

インスタンス変数に特定の値を割り当てた場合、この変数の値を再割り当てするメソッドを定義するにはどうすればよいですか? 以下のコードを で実行するとrspec、元の値が取得され続けます。

class Test
 def name 
   @name = 'me'
 end

 def name=(input)
   @name = input
 end
end
4

3 に答える 3

2
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"
于 2013-01-30T04:07:22.533 に答える
1

ゲッターで変数を設定しているので、@name変数を返すだけです。そのようです:

class Test
  def name
    @name
  end

  def name=(input)
    @name = input
  end
end

または、もっと簡単に言うと、このattr_accessorメソッドを使用して、getterメソッドとsetterメソッドのボイラープレートバージョンを宣言する必要があります。そのようです:

class Test
  attr_accessor :name
end
于 2013-01-30T04:06:55.643 に答える
1

初期値はコンストラクタメソッドで設定する必要があります。

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
于 2013-01-30T04:09:56.177 に答える