NoMethodError: неопределенный метод `type'для 8:Fixnum
Работаем над вводным упражнением Ruby с этим кодом:
num = 8
7.times do
print num.type, " ", num, "\n"
num *= num
end
Я продолжаю получать:
NoMethodError: undefined method `type' for 8:Fixnum
Должен ли я определить тип? Я думал, что это метод, который признал рубин
3 ответа
type
метод, используемый для возврата класса объекта, но он давно устарел (еще через 1,8 дня) и впоследствии удален.
Вы можете использовать class
Метод вместо этого, однако, если вы следуете учебнику или что-то подобное, это признак того, что он очень старый - возможно, 10 лет!
Посредством type
ты наверное имел ввиду class
так что меняй type
в class
:
num = 8
7.times do
print num.class, " ", num, "\n"
num *= num
end
У меня была такая же проблема с методом type при работе с . Целью этого упражнения было показать, что целые числа хранятся в объектах классов Fixnum и Bignum, которые являются подклассами класса Integer(Bignum для больших чисел). Кроме того, чтобы показать, что Ruby автоматически управляет преобразованием туда и обратно.
Но начиная с Feature #12005 в Ruby 2.4, Fixnum и Bignum были объединены в Integer. Вместе с ними исчез и метод Object#type. Обратите внимание, что в этом упражнении метод класса Object# не покажет различия между Fixnum и Bignum (распознает оба значения как Integer). Итак, единственное, чему нас сейчас научит это упражнение, — это немного истории о Ruby.
Если вы хотите узнать больше об этих двух классах, посмотрите первое упражнение «Стандартные типы» из Programming Ruby: The Pragmatic Programmer’s Guideкниги.