塊內部結合我在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