如何从模块中调用 Rake 方法
How can I call Rake methods from a module
我的 rake 文件中有很多实用函数,其中一些创建 rake 任务。我想将这些实用函数移动到一个模块中以避免名称冲突,但是当我这样做时,rake 方法不再可用。
require 'rake'
directory 'exampledir1'
module RakeUtilityFunctions
module_function
def createdirtask dirname
directory dirname
end
end
['test1', 'test2', 'test3'].each { |dirname|
RakeUtilityFunctions::createdirtask dirname
}
我得到的错误是:
$ rake
rake aborted!
undefined method `directory' for RakeUtilityFunctions:Module
C:/dev/rakefile.rb:8:in `createdirtask'
C:/dev/rakefile.rb:13:in `block in <top (required)>'
C:/dev/rakefile.rb:12:in `each'
C:/dev/rakefile.rb:12:in `<top (required)>'
据我所知,目录方法被 Rake 中的 following code 放置在 ruby 顶层:
# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
有没有一种简单的方法可以调用像这样放在顶层的函数?
定义模块时,该模块中的代码具有新的作用域。
因此 RakeUtilityFunctions 中的 directory
与顶级代码处于不同的范围。
由于您没有在 RakeUtilityFunctions 中定义 directory
,您会收到一个未定义的方法错误。
查看 this article 的范围门部分。
我现在想通了。在@ReggieB 的帮助下,我发现了这个问题:ways to define a global method in ruby.
它包含佣金更改日志的摘录。
If you need to call 'task :xzy' inside your class, include Rake::DSL into the class.
因此,最简单的方法是使用 Rake::DSL 扩展模块:
require 'rake'
directory 'exampledir1'
module RakeUtilityFunctions
self.extend Rake::DSL ### This line fixes the problem!
module_function
def createdirtask dirname
directory dirname
end
end
['test1', 'test2', 'test3'].each { |dirname|
RakeUtilityFunctions.createdirtask dirname
}
我的 rake 文件中有很多实用函数,其中一些创建 rake 任务。我想将这些实用函数移动到一个模块中以避免名称冲突,但是当我这样做时,rake 方法不再可用。
require 'rake'
directory 'exampledir1'
module RakeUtilityFunctions
module_function
def createdirtask dirname
directory dirname
end
end
['test1', 'test2', 'test3'].each { |dirname|
RakeUtilityFunctions::createdirtask dirname
}
我得到的错误是:
$ rake
rake aborted!
undefined method `directory' for RakeUtilityFunctions:Module
C:/dev/rakefile.rb:8:in `createdirtask'
C:/dev/rakefile.rb:13:in `block in <top (required)>'
C:/dev/rakefile.rb:12:in `each'
C:/dev/rakefile.rb:12:in `<top (required)>'
据我所知,目录方法被 Rake 中的 following code 放置在 ruby 顶层:
# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
有没有一种简单的方法可以调用像这样放在顶层的函数?
定义模块时,该模块中的代码具有新的作用域。
因此 RakeUtilityFunctions 中的 directory
与顶级代码处于不同的范围。
由于您没有在 RakeUtilityFunctions 中定义 directory
,您会收到一个未定义的方法错误。
查看 this article 的范围门部分。
我现在想通了。在@ReggieB 的帮助下,我发现了这个问题:ways to define a global method in ruby.
它包含佣金更改日志的摘录。
If you need to call 'task :xzy' inside your class, include Rake::DSL into the class.
因此,最简单的方法是使用 Rake::DSL 扩展模块:
require 'rake'
directory 'exampledir1'
module RakeUtilityFunctions
self.extend Rake::DSL ### This line fixes the problem!
module_function
def createdirtask dirname
directory dirname
end
end
['test1', 'test2', 'test3'].each { |dirname|
RakeUtilityFunctions.createdirtask dirname
}