Ruby 使用gets()可以给出;没有这样的文件或目录;向脚本传递参数时出错

Ruby 使用gets()可以给出;没有这样的文件或目录;向脚本传递参数时出错,ruby,Ruby,大家好,我正在制作一个简单的ruby脚本,我使用gets.chomp和参数制作表单,问题是当gets.chomp使用时,当我应用参数test时,脚本会返回一个错误 守则: #!usr/bin/ruby def formulario(quien) while (1) print "[+] Word : " word = gets.chomp print quien + " -> " + word end end quien

大家好,我正在制作一个简单的ruby脚本,我使用
gets.chomp
和参数制作表单,问题是当
gets.chomp
使用时,当我应用参数
test
时,脚本会返回一个错误

守则:

#!usr/bin/ruby

def formulario(quien)
    while (1)
        print "[+] Word : "
        word = gets.chomp
        print quien + " -> " + word
    end
end

quien = ARGV[0]

formulario(quien)
错误:

[+] Word : C:/Users/test/test.rb:8:in `gets': No such file or directory @ rb_sysopen - test (Errno::E
NOENT)
        from C:/Users/test/test.rb:8:in `gets'
        from C:/Users/test/test.rb:8:in `formulario'
        from C:/Users/test/test.rb:17:in `<main>'
[+]Word:C:/Users/test/test.rb:8:in`gets':没有这样的文件或目录@rb\u sysopen-test(Errno::E)
(不适用)
来自C:/Users/test/test.rb:8:in'get'
来自C:/Users/test/test.rb:8:in'formulario'
来自C:/Users/test/test.rb:17:in`'

有人能帮忙吗?

看起来您想让用户通过读取
STDIN
中的一行来键入一些输入,最好的方法是调用
STDIN.get
而不是
get
。因此,您的线路变成:

word = STDIN.gets.chomp
这记录为
STDIN
IO
的一个实例

现在,你正在执行,它做了一些不同的事情(我的重点):

从ARGV(或$*)中的文件列表返回下一行(并将其分配给$);如果命令行中没有文件,则从标准输入返回下一行


如果
ARGV
为空,则它的行为类似于
STDIN.get
,但不是同一事物,因此会产生混淆。

如果程序处理空参数或非空参数。您可以使用此模块(特别是如果您已经在任何地方使用默认的
get

然后你可以把它包括在你的课堂上

require 'input_helper'
class YourClass
    ...
    include InputHelper
    ...
end

与您的问题无关,但是
#!usr/bin/ruby
缺少一个前导的
/
;它应该是
#/usr/bin/ruby
。。。但是,这仅适用于UNIX和类UNIX系统,并不是真正用于Windows(CygWin除外),因此,
STDIN.get
是不必要的。@我遇到了完全相同的错误,指定
STDIN
对我有效。我可以确认使用STDIN.get也解决了同样的问题。谢谢。意外的便利可能导致陌生的地方。我觉得这种行为很奇怪,但如果我习惯了,我可能会觉得它很方便。奇怪的是,我不知道
ARGV
会干扰
。get
;这个答案对我也有用
require 'input_helper'
class YourClass
    ...
    include InputHelper
    ...
end