Введите без ввода в качестве действительного логического - PullRequest
0 голосов
/ 01 мая 2018

Я пишу очень простой код, запрашиваю подтверждение ввода текста и что я хочу сделать, так это то, что если пользователи просто нажимают «Enter», то это считается «да». Например:

define method
        puts "enter some text"
        @text= gets.chomp
        puts "you entered '#{@text}', is it correct?"
        correct = gets.chomp    
             if correct == 'y' || ''
             other_method
             else
             method
        end
end

Но когда я запускаю его на Ruby, я получаю «Предупреждение, буквенная строка в условии», и все, что вы вводите, вызывает «other_method». Решение, которое я нашел, следующее:

define method
        puts "enter some text"
        @text= gets.chomp
        puts "you entered '#{@text}', is it correct?"
        correct = gets.chomp    
             if correct == 'y'
             other_method
             elsif correct == ''
             other_method
             else
             method
        end
end

Но это довольно раздражает, я бы лучше понял, почему первый не работает, и как я могу заставить его работать, используя | |

Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Вот еще один вариант использования Regex ( Docs ):

puts "enter some text"
@text= gets.chomp
puts "you entered '#{@text}', is it correct?"
correct = gets.chomp
if /^y?$/ =~ correct      # This will match 'y' and empty string both
  other_method
else
  method
end
0 голосов
/ 02 мая 2018

Решение здесь заключается в том, чтобы использовать очень универсальный оператор case в Ruby, чтобы установить количество "случаев", которые вы хотите проверить:

puts "you entered '#{@text}', is it correct?"

case (gets.chomp)
when 'y', 'yes', ''
  method_a
else
  method_b
end

Это можно расширить, чтобы использовать регулярные выражения для еще большей универсальности:

case (gets.chomp)
when /\A\s*y(?:es)?\s*\z/i
  method_a
else
  method_b
end

Где теперь будет работать что-то вроде "y" или "yes" или "Yes ".

Если у вас есть куча операторов if, тестирующих одну и ту же переменную, попробуйте использовать оператор case для упрощения вашей логики.

0 голосов
/ 01 мая 2018

Что говорит ошибка, так это то, что вы сами вводите строку (литерал) внутри условного оператора. Когда вы делаете if correct == "y" || "", вы на самом деле говорите это if correct == "y" ИЛИ "", и просто указание строки само по себе не является условием.

Чтобы исправить это, вы должны просто указать условие после оператора и до него. Ruby не предполагает, что вы хотите, чтобы то же самое произошло после ||.

Как это:

define method
        puts "enter some text"
        @text= gets.chomp
        puts "you entered '#{@text}', is it correct?"
        correct = gets.chomp    
             if correct == 'y' || correct == ''
             other_method
             else
             method
        end
end

Надеюсь, это поможет. Счастливое кодирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...