2011-12-06 44 views

回答

8
namespace :baseline do |namespace| 
    scope = namespace.instance_variable_get("@scope") 

    INDEX_DIR = index(scope) 

    task(:foo) ... 
end 
+3

然后你可以使用它来访问'scope',它将是这个任务嵌套在其中的命名空间的数组:'namespace.instance_variable_get(“@ scope”)' –

+0

很酷,添加到答案中 – Nerian

+2

啊,好老的丑陋的黑客;-) – Reactormonk

4

现在有一个更清洁的方式:我需要这个定义动态任务,所以没有命名空间传递给块

namespace :baseline do 
    scope = Rake.application.current_scope 
    puts scope.path 
end 

是一大利好。

1

除了Dmitris answerRake.application.current_scope

namespace :baseline do |namespace| 
    scope = namespace.scope.path 
    #... 
end 

scope"baseline"(字符串,而不是请求的符号)。

但在耙,你可以定义符号或字符串的命名空间,你也可以这样定义:

namespace 'baseline' do |namespace| 
    scope = namespace.scope.path 
    #... 
end 

范围将与两个定义是相同的。

如果您确实需要符号,您可以使用scope.to_sym