Непонятное поведение интерпретатора Ruby
Передаю ARGV[0] == '4'
a = ARGV[0]
p a === /\d+/ # тут выводит false
При этом в операторе case+when срабатывает в таком же условие и выводит integer
p case a
when /\d+\.\d+/
'float'
when /\d+/
'integer' # true и выводит integer
else 'string'
end
Почему в первом случае false, во-втором true. Насколько я знаю case/when делает сравнение оператором ===, а тут видно что это не так
И следом еще один вопрос. Код тот же
p case ARGV[0]
when /\d+\.\d+/
'float'
when /\d+/
'integer' # true
else 'string'
end
Почему выводится integer если передать параметром "5a" например. Строка должна соответствовать только цифрам.
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
Для операции === важен порядок операндов:
a = ARGV[0]
p /^\d+$/ === a
p case a
when /\d+\.\d+/
'float'
when /^\d+$/
'integer'
else 'string'
end
Во втором случае в регулярке нужно указывать строку от начала до конца