为什么我的"得到"是不是在接受用户输入而是在评论中打印第一行?

时间:2016-08-01 01:37:38

标签: ruby

我开始学习红宝石。我有以下代码(使用Windows):

=begin file_new = File.new("temp.txt","w")

file_new.puts............................
.........................................

=end 

puts "What is your name?"


name = gets

puts "Hello"+name+"! How are you?"

不让我输入我的输入,它会打印以下内容:

What is your name?
Hello=begin file_new = File.new("temp.txt","w")
! How are you?

为什么它会阅读我之前注释的代码段而不是用户输入?

修改

所以我删除了多行评论并获得以下内容:

What is your name?
Helloputs "What is your name?"! How are you?

EDIT2: 这是将p ARGV放到脚本开头后的输出。

C:\RubyWorkSpace>ruby ruby.rb
["ruby.rb"]
What is your name?
Hellop ARGV! How are you?

1 个答案:

答案 0 :(得分:1)

当使用命令行参数调用脚本时,gets会将它们解释为文件列表,并从这些文件中读取而不是从stdin读取。这意味着创建类似grep和类似命令行工具的脚本的快捷方式,如果没有给出文件,它们将处理给定的文件或stdin(使得在shell脚本中管道输入变得容易)。如果您总是想从stdin读取,则应使用STDIN.gets

在您的情况下,您似乎没有使用任何命令行参数调用脚本,但实际上是:由于Windows在命令行中处理文件扩展名的方式,您只需键入foo启动名为foo.rb的ruby脚本。您的脚本名为ruby.rb,当您键入ruby时,Windows实际执行脚本ruby.rb而不是ruby.exe,Ruby解释器。因此,ruby ruby.rb实际上使用参数ruby.rb调用您的脚本ruby.rb。要调用不带参数的脚本,只需键入rubyruby.rb或者,如果要显式调用解释器ruby.exe ruby.rb。您还可以将脚本重命名为ruby以外的其他内容以避免此问题。