2016-11-11 53 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 

当我运行ruby Test.rb它给了我堆栈层太深错误

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

在这里,我知道self.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