2016-11-11 11 views
-3

私はRubyを初めて使用していて、いくつかのテストコードを実行しようとしています。続き変数名と同じ名前のメソッドを定義する方法は?

は私がruby Test.rbを実行したときに、それは私がself.nameが何度も何度も同じメソッドを呼び出すことを知っている私はレベルが深すぎエラーここ

Test.rb:4: stack level too deep (SystemStackError) 

を積み重ね与え

class Test 
    name = "my name" 
    def name 
     if self.name.nil? 
      self.name = "new name" 
     end 
    end 
end 

puts Test.new.name 

、私のコードです。しかし、どのようにしてこのようなタイプの要件を達成することができますか?

ありがとうございました。

+1

ローカル変数は、ローカルスコープを持っています。変数 'name'はローカル変数であり、' name'メソッドでは見えません。代わりにインスタンス変数を使用してください。 – Stefan

答えて

0

私はあなたが達成しようとしていることはよく分かりませんが、nameというメソッドがそれ自身を呼び出そうとしているので、あなたが書いたコードは無限の再帰です。あなたはname変数への変更をしたい場合は、これを試してみてください。

class Test 
    attr_accessor :name 
    def initialize 
     @name = "my name" 
    end 
    def name 
     if @name.nil? 
      @name = "new name" 
     end 
     @name 
    end 
end 

p Test.new.name 
関連する問題