0
我有以下代碼:問題與創建DSL語法
module A
def self.included(base)
base.extend(ClassMethods)
end
def foo
a = bar
puts a
end
def bar(str="qwe")
str
end
module ClassMethods
end
end
class B
include A
def bar(str="rty")
str
end
end
B.new.foo #=> "rty"
祝類B
看起來像這樣:
class B
include A
bar "rty"
end
B.new.foo #=> rty
或
class B
include A
HelperOptions.bar "rty" # HelperOptions class should be in module A
end
B.new.foo #=> rty
我試着用define_method
, class_eval
和initialize
。如何實現語法bar 'rty'
或HelperOptions.bar 'rty'
以及模塊A
需要做什麼?
非常感謝,這是我的」尋找。 HelperOptions.bar的第二個變體呢?我如何爲模塊A中的類HelperOptions定義'bar'方法以使用語法類B;包括A; HelperOptions.bar'rty'; end –
如果你想實現調用'HelperOptions.bar',你必須將'self'(即類'B')傳遞給'HelperOptions.bar'方法,這樣你可以調用'B.send(:define_method,:酒吧)做...'。我不會推薦它。 – toro2k