我正在用 ruby 编写一个简单的 dsl。几周前,我偶然发现了一些博客文章,其中展示了如何转换代码,例如:
some_method argument do |book|
book.some_method_on_book
book.some_other_method_on_book :with => argument
end
更简洁的代码:
some_method argument do
some_method_on_book
some_other_method_on_book :with => argument
end
我不记得如何做到这一点,我也不确定缺点,但更简洁的语法很诱人。有人知道这种转变吗?
最佳答案
def some_method argument, &blk
#...
book.instance_eval &blk
#...
end
更新:但是,它省略了 book 但不允许您使用参数。要透明地使用它,您必须以某种方式传输它。我建议自己在书上做:
class Book
attr_accessor :argument
end
def some_method argument, &blk
#...
book.argument = argument
book.instance_eval &blk
#...
end
some_method 'argument' do
some_method_on_book
some_other_method_on_book argument
end
关于ruby - ruby 中没有参数的 DSL block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225946/