考虑以下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解释器会抛出以下错误:
单例类':未定义方法' foo=' for #(NoMethodError)
如果我将self.foo = "Initial foo"
更改为foo = "Initial foo"
,那么我将在单例类中创建一个局部变量,而不是调用setter方法。
另外,我确实意识到我可能不得不将process_item
方法放在模块定义中,在单例类定义之外,这样它就不会成为单例方法,而是一个助手方法。
这段代码的正确方法是什么(能够在单例类定义中调用单例方法,并在单例类定义中使用辅助方法)?
您可以定义默认值为:
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设置为类。