如何遍历 ARGV 并为 Ruby 中数组中的每个值创建一个线程
How do you iterate over ARGV and create a Thread for each value in the array in Ruby
我正在尝试创建一个 Ruby 脚本,该脚本为 ARGV 中传递的每个参数启动一个单独的线程,但我不知道如何迭代它们并将它们传递到线程中作为常量(或线程安全)。类似于:
compile.rb
require 'rubygems'
require 'compass'
require 'compass/exec'
threads = []
ARGV.each do |arg|
threads << Thread.new { Compass::Exec::SubCommandUI.new(["compile", arg]).run! }
end
threads.each { |thr| thr.join }
结果是它会创建预期数量的线程,但每个线程都会 运行 相同的 arg 值(循环没有按预期工作)。
我正在尝试从 Ant 运行 它,像这样:
build.xml
<java fork="true" failonerror="true" classpathref="jruby.classpath" classname="org.jruby.Main">
<arg path="${ext.path}\compile.rb"></arg>
<arg line="${config.rb.dirs.str}"></arg>
</java>
其中 "config.rb.dirs.str" 包含我到多个 Sass 项目的路径,space 分开。
我是Ruby的新手,所以请不要评判。谢谢!
你能运行关注并告诉我们输出结果吗?
您可以 运行 它与 args 或使用脚本中指定的默认 args。
这只是传递变量的两种方式(我更喜欢第二种)。我认为这是一个最小的示例,不需要任何额外的东西。
args = ARGV.size > 0 ? ARGV : ['arg1', 'arg2', 'arg3']
puts "args is #{args} and has size #{args.size}"
threads = args.map do |arg|
Thread.new do
sleep 1
print "Arg is: #{arg}\n"
end
end
threads.each(&:join)
puts "--"
threads = args.map do |arg|
Thread.new(arg) do |value|
sleep 1
print "Arg is: #{value}\n"
end
end
threads.each(&:join)
我正在尝试创建一个 Ruby 脚本,该脚本为 ARGV 中传递的每个参数启动一个单独的线程,但我不知道如何迭代它们并将它们传递到线程中作为常量(或线程安全)。类似于:
compile.rb
require 'rubygems'
require 'compass'
require 'compass/exec'
threads = []
ARGV.each do |arg|
threads << Thread.new { Compass::Exec::SubCommandUI.new(["compile", arg]).run! }
end
threads.each { |thr| thr.join }
结果是它会创建预期数量的线程,但每个线程都会 运行 相同的 arg 值(循环没有按预期工作)。
我正在尝试从 Ant 运行 它,像这样:
build.xml
<java fork="true" failonerror="true" classpathref="jruby.classpath" classname="org.jruby.Main">
<arg path="${ext.path}\compile.rb"></arg>
<arg line="${config.rb.dirs.str}"></arg>
</java>
其中 "config.rb.dirs.str" 包含我到多个 Sass 项目的路径,space 分开。
我是Ruby的新手,所以请不要评判。谢谢!
你能运行关注并告诉我们输出结果吗? 您可以 运行 它与 args 或使用脚本中指定的默认 args。 这只是传递变量的两种方式(我更喜欢第二种)。我认为这是一个最小的示例,不需要任何额外的东西。
args = ARGV.size > 0 ? ARGV : ['arg1', 'arg2', 'arg3']
puts "args is #{args} and has size #{args.size}"
threads = args.map do |arg|
Thread.new do
sleep 1
print "Arg is: #{arg}\n"
end
end
threads.each(&:join)
puts "--"
threads = args.map do |arg|
Thread.new(arg) do |value|
sleep 1
print "Arg is: #{value}\n"
end
end
threads.each(&:join)