【问题标题】:Ruby method call to each using "include Enumerable"使用“include Enumerable”对每个方法进行 Ruby 方法调用
【发布时间】:2013-07-31 20:50:19
【问题描述】:

我尝试学习 Ruby 教程,但我感到非常困惑。我发现的所有地方似乎都在说定义实例变量是这样完成的;

class Example
  def fun
    # CODE
  end
end

e = Example.new
e.fun     # <- Will run your code

但我真的不明白为什么这不起作用

class Example
  include Enumerable

  def initialise
    @members = ["a", "b"]
  end

  def each
    @members.each do |member|
      yield member
    end
  end

end

当我打电话时

e = Example.new

e.each do |elmt|
  puts elmt
end

我得到了错误

NoMethodError: undefined method `each' for nil:NilClass

谁能帮我弄清楚如何让它工作。我无法找出问题所在,以下是使我相信这应该有效的众多来源中的 3 个。我显然做错了什么,但我只是看不到它

来源; http://ruby.about.com/od/advancedruby/ss/Using-The-Enumerable-Module.htm http://www.railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/ 书籍:工程软件即服务

【问题讨论】:

  • 顺便说一句:如果您的所有each 方法所做的只是将块传递给另一个方法,那么让块匿名(这应该减少混乱)实际上是有害的,因为如果你给它是一个名字,你可以传递它:def each(&amp;blk) @members.each(&amp;blk) end.

标签: ruby methods enumerable


【解决方案1】:

你有一个错字。这是initialize,而不是initialise。您的 @members 实例变量从未分配给,这就是为什么它是 nil

【讨论】:

  • @LukeTurner 如果它是自然的英语语言,那么您的拼写错误已被认为是美式与英式,但 Ruby 更偏向于美式而非英式。
  • 谢谢,这让我很长时间了。
猜你喜欢
  • 2012-12-14
  • 2011-09-22
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多