如何在Test#test
实例中调用DSL
方法?
class DSL
def initialize(c)
x = # call c.test in self context
x == 'dsl_method_content_somethig' # => true
end
def dsl_method
'dsl_method_content'
end
end
class Test
def test
dsl_method + '_something'
end
end
DSL.new(Test.new)
我尝试的一切都给了我:
undefined local variable or method `dsl_method' for #<Test:0x007f8c0a934250> (NameError)
答案 0 :(得分:0)
我想你可能会尝试包含一个模块?如果你只想在一个地方使用dsl方法,你可以这样做:
module DSL
def initialize
x = test
x == 'dsl_method_content_somethig' # => true
end
def dsl_method
'dsl_method_content'
end
end
然后在课堂上你可以做到:
class Test
include DSL
def test
dsl_method + '_something'
end
end
尽管从Test
模块调用DSL
中定义的方法有点奇怪。然后,模块需要知道它所包含的每个类的实现细节。