我複製你的源並粘貼成兩個文件:
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
,因爲您已經在處理字符串和字符。
這功課嗎?參數和你想要做的事情似乎比實際更具學術性。 –