【问题标题】:I am having trouble understanding IO.read as ruby parameter我无法将 IO.read 理解为 ruby​​ 参数
【发布时间】:2017-01-15 18:46:30
【问题描述】:

我正在检查 ruby​​quiz 上的 madlib 练习,遇到了我不明白的一行:

madlib = Madlib.new(IO.read(ARGV.shift))   

我已经进行了大量的谷歌搜索,但没有发现任何有用的信息。 我不知道该怎么办。

madlib = Madlib.new(IO.read(ARGV.shift))
answers = []
madlib.list_questions do |i, q|
  print "Give me " + q + ": "
  answers[i] = gets.strip
end
answers.each_index {|i| madlib.answer_question(i, answers[i]) }
puts madlib.show_result

【问题讨论】:

  • 你的问题不清楚。事实上,你甚至没有问题!只有一个声明。您的实际问题是什么?

标签: ruby io


【解决方案1】:

短版

它将指定为参数 (ruby script.rb file.txt) 的文件内容作为单个字符串发送到 Madlib.new

加长版

ARGV.shift

madlib = Madlib.new(IO.read(ARGV.shift))

ARGV.shiftruby script.rb 之后的第一个参数。对于:

ruby script.rb some_text_file.txt

它是some_text_file.txt

注意ARGV.shift 也会从ARGV 中删除第一个参数。下次调用ARGV.shift,会返回ruby script.rb之后的第二个参数。

IO.read()

IO.read('file.txt') 读取file.txt 的全部内容,并将其作为字符串返回。

由于File继承自IO,这里的例子读取一个文件,所以也可以写成File.read(filename)

Madlib.new()

IO.read返回的字符串发送到Madlib.new

【讨论】:

  • 谢谢,我终于可以让它在我的机器上运行了。很高兴有人解释事情......
【解决方案2】:

确实很简单。

IO.read 用于读取名称在数组 ARGV 中的文件,该数组包含传递给该 Ruby 程序的参数。

顺序是:

  1. 传递的参数包含文件名。此参数将在 ARGV 数组中;
  2. ARV.shift返回ARGV数组的第一个元素,文件名;
  3. 这个参数然后被IO.read接收,读取相应的文件并返回其内容;并且,
  4. 最后,这些内容被Madlib.new接收,并根据它们创建一个Madnew实例。

如您所见,传递给Madlib.new 的真正参数是IO.read 的结果,而不是IO.read 本身。

【讨论】:

  • 谢谢,埃德。很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2011-06-28
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2023-03-25
相关资源
最近更新 更多