在其他上下文中执行方法

时间:2015-07-28 17:48:01

标签: ruby

如何在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)

1 个答案:

答案 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中定义的方法有点奇怪。然后,模块需要知道它所包含的每个类的实现细节。