NoMethodError: неопределенный метод `type’ для 8: Fixnum

#ruby #nomethoderror #fixnum

#ruby #nomethoderror #fixnum

Вопрос:

Прорабатываем вводное упражнение Ruby с этим кодом:

 num = 8
7.times do
  print num.type, " ", num, "n"
  num *= num
end 
  

Я продолжаю получать:

 NoMethodError: undefined method `type' for 8:Fixnum
  

Должен ли я определять тип? Я думал, что это метод, который распознал ruby

Комментарии:

1. хорошо, только что нашел сообщение, в котором говорится, что нужно использовать object.class вместо этого… почему это лучше, чем использование .type?

2. за 30 секунд до ответа =)

3. @user3738855 почти всегда лучше использовать существующие методы 😉

4.Кстати, ваш пример взят из книги «кирка». Согласно предисловию «В этой книге представлена версия 1.6 Ruby, выпущенная в сентябре 2000 года».

Ответ №1:

type Метод, используемый для возврата класса объекта, но был устаревшим давным-давно (еще в 1.8 дней) и впоследствии удален.

Вы можете использовать этот class метод вместо этого, однако, если вы следуете руководству или чему-то подобному, это признак того, что он очень старый — возможно, 10 лет!

Ответ №2:

type Вы, вероятно, имели в виду class , поэтому измените type на class :

 num = 8
7.times do
  print num.class, " ", num, "n"
  num *= num
end
  

Ответ №3:

У меня была такая же проблема с методом ‘type’ при работе с программированием Ruby: Руководство прагматичного программиста. Целью этого упражнения было показать, что целые числа хранятся в объектах классов Fixnum и Bignum, обоих подклассов класса Integer (Bignum для больших чисел). Кроме того, чтобы показать, что Ruby автоматически управляет преобразованием туда и обратно.

Но начиная с функции # 12005 в Ruby 2.4, Fixnum и Bignum были объединены в целое число. С их исчезновением метод Object#type тоже исчез. Обратите внимание, что метод Object#class в этом упражнении не будет показывать различие между Fixnum и Bignum (распознает оба как целое число). Итак, да, единственное, чему это упражнение научит нас сейчас, это немного истории о Ruby.

Если вы хотите узнать больше об этих двух классах, ознакомьтесь с первым упражнением «Стандартные типы» из книги.