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книги.

Другие вопросы по тегам