Array和Enumerable有什么关系?

What is the relationship between Array and Enumerable?

Array没有sort_byEnumerable 有。这是如何工作的?

%w[aa aaaa aaa].sort_by{|item| item.length} #=> ['aa','aaa','aaaa']

这不是要抛出undefined method sort_by这样的错误吗? ArrayEnumerable有什么关系?

Array class 包括 Enumerable 模块。您可以在 "Included Modules".

左侧的文档中看到这一点

Enumerable混入Array class:Enumerable定义的所有方法都可用于Ruby数组。

Array.ancestors # => [Array, Enumerable, Object, Kernel, BasicObject]

这叫做继承。如果在对象的 class 中找不到方法,Ruby 会沿着祖先链向上走,直到找到它。

Array继承自Enumerable(更准确地说,它混入了Enumerable,这是一种继承。