假设我有一个需要编译一些文件的目标.该目标有另一个目标作为先决条件,即获取文件的目标.我们这样说:
task :obtain do
# obtain files from somewhere
end
task :compile => :obtain do
# do compilation
end
Run Code Online (Sandbox Code Playgroud)
假设:obtain目标并不总是将文件放在同一个文件夹中.我将如何通过找到:compile的路径:obtain?环境变量?
psy*_*yho 13
在我看来,使用ENV ['something']是可取的,因为如果你这样做(而不是$ global或@instance变量),你可以将它们视为任务参数,并轻松地使用命令行中的子任务.
另一方面,如果您将代码保存在单独的类/模块/方法中,您甚至不必处理那些类型的黑客攻击+您的代码将更易于测试.
Gre*_*ell 11
一种方法是将其存储在全局变量中:
task :obtain do
$obtained_dir = "/tmp/obtained"
end
task :compile => :obtain do
puts "compiling files in #{$obtained_dir}"
end
Run Code Online (Sandbox Code Playgroud)
实例变量(即@obtained_dir)也应该有效.
另一种方法是将"获取"代码拉入方法,如下所示:
task :obtain do
obtain_files
end
task :compile do
obtained_dir = obtain_files
puts "compiling files in #{obtained_dir}"
end
def obtain_files
#obtain files from somewhere
"/tmp/obtained_files"
end
Run Code Online (Sandbox Code Playgroud)