【发布时间】:2012-05-31 13:13:43
【问题描述】:
问题标题的可怕之处正是我要解决的问题。示例:
在 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?如何理解它?
【问题讨论】:
-
您对这个词有疑问吗?或者关于如何找到“必要”的方法?
-
我认为用有接口的语言来回答这个问题会容易得多。
-
@SergioTulentsev 后者会很棒。我仍然不知道什么是“基本”ActiveRecord 或 Array 方法。
-
“fake an Array interface”在鸭式语言中是什么意思?
标签: ruby oop inheritance interface implementation