如何定义与变量名同名的方法?

时间:2016-11-11 05:24:52

标签: ruby

我是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 个答案:

答案 0 :(得分: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