考虑以下Ruby代码:
module MyModule
class << self
def process_item(item)
item.capitalize
end
def foo=(item)
@foo_ref=process_item(item)
end
def foo
@foo_ref
end
self.foo = "initial foo"
end
end
我想在单例类定义中设置一个默认的foo_ref
变量。但是,Ruby解释器引发了以下错误:
单身类&#39 ;:未定义的方法`foo =&#39; #(NoMethodError)
如果我将self.foo = "Initial foo"
更改为foo = "Initial foo"
,那么我将在单例类中创建一个局部变量,而不是调用setter方法。
另外,我确实意识到我可能必须在单例类定义之外的模块定义中放置process_item
方法,这样它就不会成为单例方法,而是一个辅助方法。
这段代码的正确方法是什么(能够在单例类定义中调用单例方法,并在单例类定义中使用辅助方法)?
答案 0 :(得分:1)
您可以将默认值定义为:
module MyModule
class << self
def process_item(item)
item.capitalize
end
def foo=(item)
@foo_ref=process_item(item)
end
def foo
@foo_ref ||= "initial foo"
end
end
end
你要做的是将foo设置为单例类,而不是将foo设置为类。