Как сказал @meagar, вы сравниваете разные типы (строка из gets
и число из rand
), которые всегда будут возвращать false.
При этом у вас есть несколько разныхспособы приведения / преобразования типов данных в ruby.
Наиболее распространенный, как показал @maeger, использует to_i
, однако это может привести к некоторым странным поведениям, так как любая строка не может быть легко проанализирована какinteger вернет 0.
2.5.3 :001 > 'potato'.to_i
=> 0
2.5.3 :002 > '0xff'.to_i
=> 0
Если вы хотите избежать этого, вы можете использовать Integer(arg)
, это на самом деле метод, определенный в Kernel
, который приложит все усилия, чтобы проверить, действительно ли строка конвертируема.в целое число, и если это не удастся, он поднимет ArgumentError
.
2.5.3 :001 > Integer('potato')
=> ArgumentError (invalid value for Integer(): 'potato')
2.5.3 :002 > Integer('2')
=> 2
2.5.3 :003 > Integer('0xff') # Hexadecimal
=> 255
2.5.3 :004 > Integer('0666') # Octal
=> 438
2.5.3 :005 > Integer('0b1110') # Binary
=> 14