我正在用 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
更新:但是,这省略了书,但不允许您使用该参数。要透明地使用它,您必须以某种方式运输它。我建议在书本上这样做:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)