namespace :baseline do INDEX_DIR = index(:baseline) # context task(:foo) ... end
如何在此上下文中获取:baseline符号?
:baseline
hc8w905p1#
namespace :baseline do |namespace| scope = namespace.instance_variable_get("@scope") INDEX_DIR = index(scope) task(:foo) ... end
e5nqia272#
现在有一种更干净的方式:
namespace :baseline do scope = Rake.application.current_scope puts scope.path end
我需要它来定义动态任务,因此不必将命名空间传递给块是一个很大的优点。
kpbwa7wx3#
除了Dmitris answer与Rake.application.current_scope:
Rake.application.current_scope
namespace :baseline do |namespace| scope = namespace.scope.path #... end
scope将为"baseline"(字符串,而不是请求的符号)。但是在rake中你可以用符号或字符串来定义命名空间,你也可以这样定义:
scope
"baseline"
namespace 'baseline' do |namespace| scope = namespace.scope.path #... end
两种定义的范围相同。如果您确实需要Symbol,可以使用scope.to_sym。
scope.to_sym
mdfafbf14#
多年过去了,但改进就是改进。如果您需要Rake::NameSpace对象,但无法将名称空间对象作为参数进行访问:
Rake::NameSpace
... do |the_namespace| end
您可以这样做:
scope = Rake.application.current_scope ns = Rake::NameSpace::new Rake.application, scope
现在,ns对象将为您提供ns.tasks等方法。
ns
ns.tasks
4条答案
按热度按时间hc8w905p1#
e5nqia272#
现在有一种更干净的方式:
我需要它来定义动态任务,因此不必将命名空间传递给块是一个很大的优点。
kpbwa7wx3#
除了Dmitris answer与
Rake.application.current_scope
:scope
将为"baseline"
(字符串,而不是请求的符号)。但是在rake中你可以用符号或字符串来定义命名空间,你也可以这样定义:
两种定义的范围相同。
如果您确实需要Symbol,可以使用
scope.to_sym
。mdfafbf14#
多年过去了,但改进就是改进。
如果您需要
Rake::NameSpace
对象,但无法将名称空间对象作为参数进行访问:您可以这样做:
现在,
ns
对象将为您提供ns.tasks
等方法。