неопределенный метод "новый" для Fixnum:Class (NoMethodError)

    class Fixnum
      def repeat
        for i in 1..self.to_i
          yield
        end
      end
    end

    z = Fixnum.new 4

Программа выше дает undefined method new for Fixnum:Class (NoMethodError). Почему так? Я только что попробовал использовать его в другом классе, и он работает.

Спасибо!


person Ava    schedule 18.09.2011    source источник
comment
Разве repeat не странное имя для метода, который будет выдавать разные значения на каждой итерации, а не повторять одно и то же? Также вы в основном переопределяете Hash#each ((1..z).each { |x| ... }).   -  person Michael Kohl    schedule 18.09.2011
comment
Кстати, Fixnum#times делает то же самое! Кроме того, он выдает числа от 0 до n-1.   -  person Marc-André Lafortune    schedule 18.09.2011
comment
Я считаю, что код был примером для понимания того, как работают .each и подобные методы, а не метод, который пыталась создать Виниса, а также метод делает то, что говорит его название, он повторяет блок n раз.   -  person derp    schedule 18.09.2011


Ответы (1)


Мне кажется метод и ошибка отношения не имеют, зачем вы делаете z=Fixnum.new 4?

Метод следует использовать так:

class Fixnum
  def repeat
    for i in 1..self.to_i
      yield
    end
  end
end

5.repeat{puts "hi"}
#or maybe?
z = 3
z.repeat{puts "bye"}
person derp    schedule 18.09.2011
comment
Ох, ну ладно. На самом деле я новичок в рубине и видел похожий вызов класса в другом примере, поэтому пытался. Спасибо! - person Ava; 18.09.2011
comment
Нет проблем, рад, что смог помочь. - person derp; 18.09.2011