我开始学习红宝石。我有以下代码(使用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?
答案 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
。要调用不带参数的脚本,只需键入ruby
,ruby.rb
或者,如果要显式调用解释器ruby.exe ruby.rb
。您还可以将脚本重命名为ruby
以外的其他内容以避免此问题。