块内部结合我在Ruby DSL的作品,像这样:更改上下文/红宝石
desc 'list all todos'
command :list do |c|
c.desc 'show todos in long form'
c.switch :l
c.action do |global,option,args|
# some code that's not relevant to this question
end
end
desc 'make a new todo'
command :new do |c|
# etc.
end
一位同行开发商建议我提高我的DSL不要求通过c
到command
块,和因此不需要所有 里面的方法c.
;据推测,他暗示我可以做下面的代码工作是相同的:
desc 'list all todos'
command :list do
desc 'show todos in long form'
switch :l
action do |global,option,args|
# some code that's not relevant to this question
end
end
desc 'make a new todo'
command :new do
# etc.
end
为command
的代码看起来像
def command(*names)
command = make_command_object(..)
yield command
end
我试过几件事情,是无法得到它的工作;我无法弄清楚如何改变command
块内代码的上下文/绑定,使其与默认值不同。
任何想法,如果这是可能的,我怎么可能做到这一点?
是评价特殊?链接的文章并未如此表示。我的代码在'command'的定义中做了一个yield。你是说我应该在我的方法sig中放入&block,然后是block而不是yield的instance_eval? (用这个信息更新问题) – davetron5000 2011-05-02 00:39:22