kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Nobita
Nobita
Вопрос

Разница между Integer(value) и value.to_i

Дается строковый объект вида:

twohundred = "200"

В чем разница между выполнением:

Integer(twohundred)  #=> 200

и:

twohundred.to_i      #=> 200

Есть ли разница? Рекомендуется ли использовать один из них в сочетании с другим?

37 2012-04-10T17:26:44+00:00 3
 Stefan
Stefan
Редактировал вопрос 12-го июня 2016 в 8:48
Программирование
ruby
Решение / Ответ
 pjumble
pjumble
10-го апреля 2012 в 5:29
2012-04-10T17:29:40+00:00
Дополнительно
Источник
Редактировать
#15903492

Integer(num) вызовет исключение ArgumentError, если num не является допустимым целым числом (можно указать основание).

num.to_i преобразует столько, сколько сможет.

Например:

"2hi".to_i 
#=> 2

Integer("2hi")
#=> throws ArgumentError

"hi".to_i
#=> 0

Integer("hi")
#=> throws ArgumentError

"2.0".to_i
#=> 2

Integer("2.0")
#=> throws ArgumentError
Ronan Boiteau
Ronan Boiteau
Редактировал ответ 7-го марта 2018 в 11:41
49
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 bta
bta
10-го апреля 2012 в 5:32
2012-04-10T17:32:02+00:00
Дополнительно
Источник
Редактировать
#15903493

Из документации по Ruby для Integer():

Integer(arg,base=0) → integer ... Если arg - строка, если base опущен или равен нулю, то радикс индикаторы (0, 0b и 0x) выполняются. В любом случае, строки должны быть строго соответствовать числовому представлению. Такое поведение отличается от поведения String#to_i.

Другими словами, Integer("0x100") => 256 и "0x100".to_i => 0.

10
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Cary Swoveland
Cary Swoveland
12-го июня 2016 в 7:36
2016-06-12T19:36:34+00:00
Дополнительно
Источник
Редактировать
#15903494

Рассмотрим различия между использованием метода экземпляра String#to_i и метода модуля Kernel::Integer. Сначала, однако, встроим последующий в другой метод int1:

def int1(str)
  Integer(str) rescue nil
end

Таким образом, если str не может быть интерпретировано как целое число, то Integer вызовет исключение ArgumentError, в результате чего встроенное спасение вернет nil. Если Integer не вызовет исключения, то int вернет целочисленный эквивалент строки.

Чтобы завершить сравнение, добавим регулярное выражение, которое подтверждает, что содержимое строки представляет собой целое число, прежде чем использовать to_i для преобразования.

R = /
    (?<=\A|\s) # match beginning of string or whitespace character (positive lookbehind)
    -?         # optionally match a minus sign
    \d+        # match one or more digits
    (?=\s|\z)   # match whitespace character or end of string (positive lookahead)
    /x         # free spacing regex definition mode

def int2(str)
  str =~ R ? str.to_i : nil
end

Как и в случае с int1, если str не может быть интерпретирована как целое число, то int2 вернет nil; в противном случае int вернет целочисленный эквивалент строки.

Попробуем провести некоторые сравнения.

str = '3'
str.to_i       #=> 3 
int1(str)      #=> 3 
int2(str)      #=> 3

str = '-3'
str.to_i       #=> -3 
int1(str)      #=> -3 
int2(str)      #=> -3

str = '3.0'
str.to_i       #=> 3 
int1(str)      #=> nil 
int2(str)      #=> nil 

str = '3.2'
str.to_i       #=> 3 
int1(str)      #=> nil 
int2(str)      #=> nil 

1e3            #=> 1000.0
str = '1e3'
str.to_i       #=> 1 
int1(str)      #=> nil 
int2(str)      #=> nil 

str = '-1e3' str.to_i #=> -1 int1(str) #=> nil int2(str) #=> nil
str = '- 1e3'
str.to_i       #=> 0 
int1(str)      #=> nil 
int2(str)      #=> nil 

str = '3a'
str.to_i       #=> 3 
int1(str)      #=> nil 
int2(str)      #=> nil 

str = '1-3a'
str.to_i       #=> 1
int1(str)      #=> nil 
int2(str)      #=> nil

str = 'b3'
str.to_i       #=> 0
int1(str)      #=> nil 
int2(str)      #=> nil

String#to_i считывает цифры (возможно, перед которыми стоит знак минус) до тех пор, пока не прочитает символ пробела или не достигнет конца строки. Затем она просто преобразует эти цифры и возможный знак минус в Fixnum, которое и возвращает. Конечно, to_i имеет свое применение, но эти примеры показывают, что следует использовать int1 или int2, если требуется вернуть nil, если строка не содержит представления целого числа.

2
0
Похожие сообщества 6
Чат по Руби
Чат по Руби
2 366 пользователей
Чат-болталка для учеников руби-школы и не только. Сайт школы: https://rubyschool.us Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-06-10 или тут https://graph.org/Pravila-chata-Rubi-shkoly-06-10
Открыть telegram
RubyRush.ru
RubyRush.ru
2 251 пользователей
Дружелюбный чат для начинающих программистов и учеников rubyrush.ru, обсуждаем программирование, ruby и т. п. Правила чата https://telegra.ph/22-09-05-3 Популярные вопросы (с ответами) https://telegra.ph/22-09-17-4 💎🦜 (уроки: https://rubyrush.ru/steps)
Открыть telegram
pro.rb (Ruby/Rails / RU)
pro.rb (Ruby/Rails / RU)
1 209 пользователей
Язык программирования Ruby: https://ru.wikipedia.org/wiki/Ruby Вакансии: @rubyjob
Открыть telegram
Ruby — вакансии и аналитика
Ruby — вакансии и аналитика
384 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Ruby. Full-time, part-time, remote и разовые подработки. Обмен инсайдами и аналитикой на рынке труда. Тематическое общение: @ruby_ru См. также: @python_jobs, @nodejs_jobs, @devops_jobs
Открыть telegram
Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
301 пользователей
Открыть telegram
Ruby Talks
Ruby Talks
238 пользователей
Национальная Флеймотека
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Andrei Kalinin
Зарегистрирован 2 недели назад
2
Koroleva Ego
Зарегистрирован 1 месяц назад
3
Star Lenon
Зарегистрирован 1 месяц назад
4
Данил Жевнеров
Зарегистрирован 1 месяц назад
5
Анна Литвиненко
Зарегистрирован 2 месяца назад
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией