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