【问题标题】:undefined method `new' for Fixnum:Class (NoMethodError)Fixnum:Class (NoMethodError) 的未定义方法“新”
【发布时间】:2011-09-18 01:03:06
【问题描述】:
    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)。为什么这样?我刚刚尝试在另一个课程中使用它并且它有效。

谢谢!

【问题讨论】:

  • repeat 是不是一个奇怪的名称,用于在每次迭代中产生不同值而不重复相同的方法?此外,您基本上是在重新实现 Hash#each ((1..z).each { |x| ... })。
  • 顺便说一句,Fixnum#times 做同样的事情!此外,它还产生从0 到n-1 的数字。
  • 我相信代码是一个示例,可以了解 .each 和类似的方法如何工作,而不是 Vinisa 试图创建的方法,而且,该方法执行名称所说的,它重复了该块n 次。

标签: ruby nomethoderror


【解决方案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"}

【讨论】:

  • 哦,好吧。实际上我是 ruby​​ 的新手,并且在不同的示例中看到了类似的类调用,所以正在尝试。谢谢!
  • 没问题,很高兴能帮上忙。
猜你喜欢
  • 2015-12-24
  • 1970-01-01
  • 2013-04-24
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2019-06-12
相关资源
最近更新 更多