Непонятное поведение интерпретатора Ruby

Рейтинг: 0Ответов: 1Опубликовано: 16.01.2023

Передаю 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" например. Строка должна соответствовать только цифрам.

Ответы

▲ 0Принят

Для операции === важен порядок операндов:

    a = ARGV[0]
    p /^\d+$/ === a
    p case a
    when /\d+\.\d+/
        'float'
    when /^\d+$/
        'integer'
    else 'string'
    end

Во втором случае в регулярке нужно указывать строку от начала до конца