"desc 'description'" 抽成背后的魔力是什么?
What is the magic behind "desc 'description'" on rake?
例如
https://github.com/locomotivecms/wagon/blob/master/Rakefile#L23
desc 'build the gem and release it to rubygems.org'
task release: :gem do
sh "gem push pkg/locomotivecms_wagon-#{gemspec.version}.gem"
end
当我运行rake --task
时,它作为描述返回。
rake clobber_package # Remove package products
rake gem # Build the gem file locomotivecms_wagon-2.2.0.beta1.gem
rake package # Build all the packages
rake release # build the gem and release it to rubygems.org
rake repackage # Force a rebuild of the package files
rake spec # Run RSpec code examples
rake spec:integration # Run RSpec code examples
rake spec:unit # Run RSpec code examples
但是我不明白他们怎么能接受描述,不是每次调用描述时都会替换它吗?他们如何知道特定描述属于特定任务?
想象一下简单的 DSL 有一个状态(非常天真的实现):
@tasks = []
@current = nil
def desc text
@current = Task.new(desc: text)
end
def task params, &cb
@current.update(params)
yield
....
@tasks << @current
@current = nil
end
上面的代码需要额外的检查等,但想法是:有状态 DSL 收集任务及其描述。
例如 https://github.com/locomotivecms/wagon/blob/master/Rakefile#L23
desc 'build the gem and release it to rubygems.org'
task release: :gem do
sh "gem push pkg/locomotivecms_wagon-#{gemspec.version}.gem"
end
当我运行rake --task
时,它作为描述返回。
rake clobber_package # Remove package products
rake gem # Build the gem file locomotivecms_wagon-2.2.0.beta1.gem
rake package # Build all the packages
rake release # build the gem and release it to rubygems.org
rake repackage # Force a rebuild of the package files
rake spec # Run RSpec code examples
rake spec:integration # Run RSpec code examples
rake spec:unit # Run RSpec code examples
但是我不明白他们怎么能接受描述,不是每次调用描述时都会替换它吗?他们如何知道特定描述属于特定任务?
想象一下简单的 DSL 有一个状态(非常天真的实现):
@tasks = []
@current = nil
def desc text
@current = Task.new(desc: text)
end
def task params, &cb
@current.update(params)
yield
....
@tasks << @current
@current = nil
end
上面的代码需要额外的检查等,但想法是:有状态 DSL 收集任务及其描述。