我一直在嘗試通過閱讀其他人的代碼在ruby中獲得元編程的竅門。我有這段代碼對我來說可能太難以調試了。這是代碼。添加到元類中的Ruby對象是不可見的
#!/usr/bin/env ruby
class Person
def print_name
p "#{Person.identity.name}"
end
class << self
attr_accessor :identity
def identify()
self.identity ||= Identity.new
yield(identity)
end
end
class Identity
attr_accessor :name
def initialize
@name = "kibet"
end
end
end
me = Person.new
me.print_name
而我得到的錯誤是這樣的
`print_name': undefined method `name' for nil:NilClass (NoMethodError)
from ./meta_config.rb:28
幫助的高度讚賞。
如果你解釋了你的目標是什麼,你的代碼有問題,但看起來你正在使用錯誤的工具來做這件事情會更簡單。 –
錯誤是因爲'@ identity'在調用'print_name'時尚未初始化。也就是說,'identify'沒有被調用(並且你必須擺脫那個「yield」)。 –
@santos謝謝你的想法。老實說,我濫用了這段代碼中的一些ruby特性。 –