9

问题标题的可怕性是我要解决的问题。例子:

在 Ruby 中,Enumerable 在某种意义上是一个接口,我可以实现一些东西并将其记录为:

def myfancymethod(please_pass_me_an_Enumerable_here)

但另一方面,Enumerable 是接口的一种放大,其中 #each 作为其方法之一。如果我有课

class Foo
  def each
    :bar
  end
end

对于那些不熟悉 Ruby 的人来说,如果你在一个类中混入 Enumerable 模块,你会得到几十个方法,这些方法只依赖于#each方法来提供诸如#map,#select等之类的东西。

我可以说我的Foo课程是 Enumerable-able 或 Enumerable-compatible 还是什么?哪些术语描述了“成为可枚举对象需要什么?”、“你必须拥有#each”的答案

同样,在 Ruby

(Array.new.methods - Object.new.methods).size # 111

这是否意味着要伪造一个 Array 接口,我必须实现 111 个方法?没办法,但我如何找出哪些方法是 Array 的“本质”。只是和?#[]_ 如何理解它?#[]=#size

4

2 回答 2

5

我想到了“合同”这个词。例如,Enumerable 的合同是“给我#each,我给你这些花哨的方法”。

于 2012-05-24T22:39:52.593 回答
4

您可能对此功能请求感兴趣,它建议对广泛使用的Hash类的体系结构进行一些改进。

可悲的事实是忘记它。在这一点上,Ruby 没有这样的东西。Enumerable并且Comparable尽可能接近,他们的“合同”只是文件问题。

顺便说一句,我相信#sizeEnumerable可以使用的另一种方法,尽管它是可选的。

于 2012-05-28T01:16:46.863 回答