我希望能够编写如下代码:
MyModule::MyClass.configure do |item|
item.var1 = 'dsads'
item.var2 = 'dsadsa'
item.var3 = 'fdsfdsfd'
end
好吧,我在其中定义了一个模块和一个类:
module MyModule
class MyClass
end
end
......我应该怎么做?
我希望能够编写如下代码:
MyModule::MyClass.configure do |item|
item.var1 = 'dsads'
item.var2 = 'dsadsa'
item.var3 = 'fdsfdsfd'
end
好吧,我在其中定义了一个模块和一个类:
module MyModule
class MyClass
end
end
......我应该怎么做?
如果您想进行配置,那么我建议您使用一个Singleton
类,如下所示:
require 'singleton'
module MyModule
class MyClass
include Singleton
end
end
然后你需要定义这个configure
方法:
require 'singleton'
module MyModule
class MyClass
include Singleton
def self.configure
yield(self)
end
end
end
yield
将在类的上下文中评估块,这意味着在块对象上调用的任何方法都将在类对象上调用。
然后,对于您在块内调用的每个方法configure
,您都需要在类中定义相应的方法。您可以通过手动定义方法来做到这一点:
class MyClass
def self.var1=(value)
@var1 = value
end
def self.var1
@var1
end
end
或者,您可以使用attr_accessor
:
class MyClass
class << self
attr_accessor :var1
end
end
要取回值,只需执行以下操作:
MyMoudle::MyClass.var1
如果您不想使用单例,则将表示的类更改MyClass
为模块。
您应该编写将块作为参数的类方法,并使用新创建的项目实例生成它。像这样的东西
class MyClass
def self.configure
if block_given?
item = ItemClass.new
yield(item)
end
end
end