我复制你的源并粘贴成两个文件:
test.rb:
def test (app, download, launch)
for i in 0..(app.length - 1)do
#DO SOMETHING HERE WITH THIS
p app[i].to_s + download[i].to_s + launch[i].to_s
end
end
test (ARGV[0].split(//) , ARGV[2].split(//) ,ARGV[1].split(//))
和TEST2。 rb:
app = ["fda","asdf"]
down = ["ok","nok"]
la = ["ok","ok"]
system("ruby test.rb #{app} #{down} #{la}")
使用Ruby 1.9.2p290,我得到了这个结果wh我运行你的代码:
ruby test2.rb
test.rb:7: syntax error, unexpected ',', expecting ')'
test (ARGV[0].split(//) , ARGV[2].split(//) ,ARGV[1].split(//))
^
test.rb:7: syntax error, unexpected ',', expecting $end
test (ARGV[0].split(//) , ARGV[2].split(//) ,ARGV[1].split(//))
这告诉我你没有准确地报告你看到的问题。
固定的语法错误返回此:
ruby test2.rb
"[[a"
"fos"
"dkd"
"a,f"
",]"
我得到的输出是什么,我会期望从你的代码,但它并不像你说你得到了什么,所以我怀疑你的报道输出正确。当你寻求帮助时,请准确无误,无论是你写的代码和你见过的输出。
看你的代码正在通过数据显示,参数是:
0 [fda,
1 asdf]
2 [ok,
3 nok]
4 [ok,
5 ok]
仅供参考,我用这段代码代替test.rb
那些:
ARGV.each_with_index do |a, i|
puts "#{i} #{a}"
end
我期望那是因为system("ruby test.rb #{app} #{down} #{la}")
不会做你认为它做的事情。以下是发送到子shell的实际命令查找时system
过程它像:
test.rb [fda, asdf] [ok, nok] [ok, ok]
再次,相匹配的论点是什么,当应用程序看到他们喜欢。
要明白发生了什么,你需要阅读的文档system
:
system([env,] command... [,options]) -> true, false or nil
[...]
command... is one of following forms.
[...]
cmdname, arg1, ... : command name and one or more arguments (no shell)
所以,system
允许我们单独发送的所有参数,这真的是你想要的。更改test2.rb
到:
app = %w[ fda asdf ]
down = %w[ ok nok ]
la = %w[ ok ok ]
system(
"echo",
"test.rb",
%Q["#{ app.join(',') }"],
%Q["#{ down.join(',') }"],
%Q["#{ la.join(',') }"]
)
给我这个在命令行:
ruby test2.rb
test.rb "fda,asdf" "ok,nok" "ok,ok"
这似乎更实用一点。因为如何system
的作品,我可以清理并降低了一下:
app = %w[ fda asdf ]
down = %w[ ok nok ]
la = %w[ ok ok ]
system(
"ruby", # execute this
"test.rb", # with this script name
app.join(','), down.join(','), la.join(',') # and these parameters
)
在看什么test.rb
看到显示:
ruby test2.rb
0 fda,asdf
1 ok,nok
2 ok,ok
再次,改进,更接近预期的代码。
我不打算完成你的代码,因为我怀疑这是一项家庭作业,而不是实际使用。一些提示可以帮助您:
- 您对
split
的使用不正确,也不是我要放的地方。
- 您使用
for
不是惯用的Ruby。看看Array.each
AND了解为什么它是首选而不是for
。
- 您不需要使用
to_s
,因为您已经在处理字符串和字符。
这功课吗?参数和你想要做的事情似乎比实际更具学术性。 –