【发布时间】:2012-03-13 01:46:38
【问题描述】:
我正在尝试从文本文件中读取参数并将它们一次全部传递给 Ruby 方法。 文本文件中的参数格式正确,例如:
"path", ["elem1","elem2"], 4,"string"
我打算这样调用函数:
my_method("path", ["elem1","elem2"], 4,"string")
希望我能做到这样:
IO.readlines("path").each do |line|
puts "#{line}"
my_method(*line.split(","))
end
问题是在方法中所有的数组元素都用引号括起来。所以我的方法最终得到了这个:
""path"", "["elem1","elem2"]", "4",""string""
现在,这可能是因为它是一个字符串数组,但是当我说*arr 时,为什么还要用额外的"" 包装它呢?
如果我使用 eval:
IO.readlines("path").each do |line|
puts "#{line}"
my_method(*eval(line))
end
在 "path", ["elem1","elem2"], 4,"string" 中的第一个参数之后出现语法错误,意外的 ','
如何实现一次将所有元素传递给方法,从文本文件中读取参数
另外,既然 Ruby 不关心类型,为什么我必须首先用
""包装我的参数。如果我不将参数包含在引号中,则会收到undefined variable for main:object错误。
【问题讨论】:
-
数组元素不是“用引号括起来的”,您传递的是其中包含引号的字符串。您认为您正在“评估”文件中的行,因此您拥有例如一个实际的数组,但您没有。
-
您使用的是哪个文件扩展名? (*.txt 或 *.csv 还是哪个?)
-
@DaveNewton Newton ,当我使用调试器放置断点时,数组中的每个元素似乎都包含在引号中。所以 "hello" => ""hello"" 和 5=> “5”
-
@ManishDas ,不确定我是否明白你的意思。 IO.readlines 中使用的文件是 .txt,执行此操作的代码在 *.rb 文件中
-
您是否考虑过使用 *.csv 作为输入文件,或者您不灵活地切换到 *.csv?因为如果您使用 CSV 文件,那么它将帮助您解析列中的输入,这样您就可以得到您现在正在尝试的方式。
标签: ruby arrays argument-passing