2015-04-17 2 views
0

Ruby позволяет преобразовывать базы с использованием Integer.to_s (base) и String.to_i (base).Какова цель вызова to_i в Integer?

Я надеялся преобразовать двоичное число в десятичное число, используя Integer.to_i (базовый), но это не работает, по-видимому

100.to_i(2) 
ArgumentError: wrong number of arguments (1 for 0) 

Однако запуск

Integer.respond_to? :to_i 

Дает истинное значение. Почему это так? Что является более простым способом преобразования между целыми числами разных баз?

+0

Показать код, который вызывает ошибку. –

+0

Я не совсем понимаю ваш вопрос, покажите свой код. –

+0

Я имею в виду, как в 100.to_i работает, но 100.to_i (2) не будет работать –

ответ

3

Ошибка в том, что Integer#to_i принимает 0 аргумент, а не 1.

Чтобы получить значение 100 в двоичной системе используется двоичная буквальным 0b100:

0b100 
# => 4 

или преобразовать его в строку первой:

100.to_s.to_i(2) 
# => 4 
+0

BTW '100' на самом деле не двоичный' 4', это '100':' 100 + 100 # => 200'. –

+0

@MarekLipka Я знаю, что '100' - это десятичное число. OP пытается * преобразовать двоичное целое число в десятичное целое *, в моем понимании, это то, что он хочет. Или, может быть, я неправильно понял. –

+2

Я думаю, вы правильно поняли это, но стоит отметить, что если OP имеет целое число 100, которое должно быть двоичным «4», он делает что-то неправильно. –

4

Целое число уже находится на всех основаниях одновременно. Базовое (что-то) представление имеет смысл только для строки. Целое число является просто значением и 10 (10) - это то же самое, что и 1010 (2).

4

Чтобы ответить только название вашего вопроса:

Какова цель того, чтобы быть в состоянии назвать to_i на Integer?

Это обеспечивается в основном так, что методы, которые требуют Integer могут принимать String с, Float с и другими типами и принуждать затем к требуемой форме, без необходимости явно определять класс.

def method_that_needs_int(param) 
    n = param.to_i 
    # . . . whatever we want to do with n 
end 

Integer#to_i не является по существу не оп, но это может сделать ваш код проще всего с помощью существующих для подобных случаев.

-1

От ruby-doc.org

to_i → целочисленного

В ИНТ уже целое, все эти методы просто возвращают приемник. Синонимы: to_int, floor, ceil, truncate.

Исходный код метода

static VALUE 
int_to_i(VALUE num) 
{ 
    return num; 
} 

Так нет никакой цели.

Смежные вопросы