Проблемы с пониманием вывода из логического выражения RegEx - PullRequest
0 голосов
/ 09 марта 2012

Я должен проверить, состоит ли имя из букв:

name = "Jack"

test = 'name =~ /^[A-Z]/'

Насколько я понимаю, это:

puts eval(test)

должно возвращать: TRUE, но выводится как '0' (да, я знаю, что 0 в некоторых языках == false ..)

Но если я попробую eval в операторе if ..

if eval(test)
puts 'yeah'
end

.. я получаю ожидаемый результат .. ИСТИНА, точнее: «да» ..

Почему я не могу сразу получить «правильный» вывод? Я не нашел ничего, что имеет смысл, от моих друзей @ Google ..

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

=~ возвращает позицию совпадения.

В ruby ​​все, кроме nil и false считается верным. Даже 0 это правда!

Один из способов преобразования чего-либо в bool - это использование !!.

1 голос
/ 09 марта 2012

Если вы хотите получить значения true / false, вы можете написать

!!(name =~ /^[A-Z]/)

, но это не обязательно, поскольку if хорошо работает со значением, возвращаемым =~

...