我正在研究关于rubyquiz的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
答案 0 :(得分:3)
它将指定为参数(ruby script.rb file.txt
)的文件内容作为单个字符串发送给Madlib.new
。
madlib = Madlib.new(IO.read(ARGV.shift))
ARGV.shift
是ruby script.rb
之后的第一个参数。对于:
ruby script.rb some_text_file.txt
是some_text_file.txt
。
请注意,ARGV.shift
也会从ARGV
中删除第一个参数。下次调用ARGV.shift
时,它将在ruby script.rb
之后返回第二个参数。
IO.read('file.txt')
读取file.txt
的全部内容,并将其作为字符串返回。
由于File
继承自IO
,此处的示例读取文件,因此也可以写为File.read(filename)
。
IO.read
返回的字符串会发送到Madlib.new
答案 1 :(得分:1)
确实非常简单。
IO.read
用于读取名称在数组ARGV中的文件,该文件包含传递给此Ruby程序的参数。
序列是:
ARV.shift
返回ARGV数组的第一个元素,即文件名; IO.read
接收此参数,该参数读取相应的文件并返回其内容;和,Madlib.new
接收,它会根据它们创建一个Madnew实例。如您所见,传递给Madlib.new
的真实参数是IO.read
的结果,而不是IO.read
本身的结果。