Подтвердить что ты не робот

Использование gets() дает ошибку "Нет такого файла или каталога" при передаче аргументов в мой script

Привет, я делаю простой ruby ​​ script, где я делаю форму с помощью gets.chomp и аргументов, проблема в том, что когда gets.chomp использует script, мне возвращается ошибка, когда я применяю аргумент 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>'

Может ли кто-нибудь помочь?

4b9b3361

Ответ 1

Похоже, вы хотите, чтобы пользователь вводил какой-либо ввод, читая строку из STDIN, лучший способ сделать это - вызвать STDIN.gets, а не gets. Таким образом, ваша строка будет выглядеть следующим образом:

word = STDIN.gets.chomp

Это задокументировано как IO.gets. STDIN - это экземпляр IO.

Сейчас вы выполняете Kernel.gets, что делает что-то другое (внимание мое):

Возвращает (и присваивает $_) следующую строку из списка файлов в ARGV (или $*) или со стандартного ввода, если файлы не присутствуют в командной строке.

Кажется, что он ведет себя как STDIN.gets, если ARGV пуст, но это не одно и то же, поэтому путаница.

Ответ 2

Если ваша программа обрабатывает пустой аргумент или непустой аргумент. Вы можете использовать этот модуль (особенно если вы уже используете по умолчанию gets везде)

# A module that help to use method gets no matter what the file argument is
module InputHelper
    # Handle input method based on its file argument
    def gets
        if ARGV.nil?
            Kernel.gets
        else
            STDIN.gets
        end
    end
end

и тогда вы можете включить его в свой класс

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