2016-11-11 1 views
-3

Ruby를 처음 사용하고 일부 테스트 코드를 작성하려고합니다. 변수 이름과 같은 이름으로 메서드를 정의하는 방법은 무엇입니까?

다음

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

puts Test.new.name 

내가 그것을 여기

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

내가 self.name가 또 다시 같은 방법을 호출 할 것을 알고 너무 깊이 오류 수준을 쌓아 나에게 제공 ruby Test.rb을 실행할 때, 내 코드입니다. 그러나 그런 요구 조건을 어떻게 성취 할 수 있을까요?

감사합니다.

+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 
관련 문제