Конечно, это не работает.===
("triqual") является эквивалентом "Имеет тот же класс, что и".Итак, что вы там делаете, спрашиваете Ruby:
(a class of this regex is the same as the class of the string) equals string "true"
Внутреннее сравнение в этом случае неэффективно и никогда не сработает с начала (Regexp и строка никогда не принадлежат к одному и тому же классу в любом случае), внешнееникогда не сработает (Ruby не имеет магических строковых констант, таких как undefined
* в ECMAscript).
Для условных выражений в Ruby полезно запомнить это: любое выражение, вычисляющее что-либо, кроме nil
или false
, будетбыть правдой!так что оператор совпадения с регулярным выражением будет работать нормально (он возвращает nil
, когда совпадений не найдено, что вы и искали, и смещение, при котором совпадение было найдено - и любое целое число в Ruby "trueish"даже 0).
Так и есть,
print "Password: "
x = gets.chomp
until /^[\d]+$/ =~ x
print "Only numbers allowed, Password: "
x = gets.chomp
end
pw =x.to_i