Нет встроенной функции, позволяющей определить, является ли строка целым числом, но вы можете легко создать свою собственную:
class String
def int
Integer(self) rescue nil
end
end
Это работает, потому что метод Kernel Integer()
выдает ошибку, еслиСтрока не может быть преобразована в целое число, а встроенный rescue nil
превращает эту ошибку в ноль.
Integer("1") -> 1
Integer("1x") -> nil
Integer("x") -> nil
и, таким образом:
"1".int -> 1 (which in boolean terms is `true`)
"1x".int -> nil
"x".int -> nil
Вы можете изменить функцию наверните true
в истинных случаях вместо целого числа, но если вы проверяете строку, чтобы увидеть, является ли она целым числом, скорее всего, вы хотите использовать это целое для чего-то!Я очень часто делаю такие вещи, как это:
if i = str.int
# do stuff with the integer i
else
# error handling for non-integer strings
end
Хотя, если назначение в тестовой позиции оскорбляет вас, вы всегда можете сделать это так:
i = str.int
if i
# do stuff with the integer i
else
# error handling for non-integer strings
end
В любом случае, этот методпреобразование выполняется только один раз, что, если вам приходится выполнять много из них, может иметь существенное преимущество в скорости.
[Имя функции изменено с int?
на int
, чтобы не указывать, что оно должно возвращать только значение true/false.]