Использование регулярных выражений в простых операторах if? - PullRequest
0 голосов
/ 12 февраля 2020

Вместо выполнения:

puts "what type of input?"
input = gets.chomp
if %W[Int INT i I Ints ints].include?(input) 
puts "enter int"
i = gets.to_i

Я хочу использовать регулярное выражение для интерпретации ввода строки пользователем. Например,

puts "are you entering in a string, an int or a float?"
case gets
when /\A(string|s)\z/i
puts "enter in a string"
gets.chomp
when /\A(int|i)\z/i
puts "enter an int"
gets.to_i
when /\A(float|f)\z/i
puts "enter a float"
gets.to_f
end

Каков синтаксис для получения того же результата, но с использованием операторов if вместо оператора case?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

gets возвращает строку с символом возврата каретки. Вам нужно сопоставить окончание с \Z, а не \z.

puts "are you entering in a string, an int or a float?"
case gets
when /\As(tring)?\Z/i
puts "enter in a string"
gets.chomp
when /\Ai(nt)?\Z/i
puts "enter an int"
gets.to_i
when /\Af(loat)?\z/i
puts "enter a float"
gets.to_f
else puts "Didn’t work"
end

Я также немного обновил регулярные выражения, чтобы четко показать намерение.

1 голос
/ 12 февраля 2020

Если вы хотите превратить ваш case в if, вы должны сохранить выражение, предназначенное для gets, в переменную:

response=gets.chomp
if /..../ =~ response
   ...
elsif /.../ =~ response
   ....
....
else
   ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...