我想要更好地瞭解Ruby
。所以Ruby使Mixins
成爲一流的概念。在C#
中,人們可以創建Extension Methods
,其作用於Interfaces
。所以這兩種技術都提供了一種廣爲人知的機制,即Mixin
。有什麼Ruby Mixins可以做什麼C#僞Mixins(接口+擴展方法)不能?
在特定示例上比較兩種方法可能比較好。
可枚舉在Ruby中
讓我們所有的在收集工作了那些美麗的方法。在Ruby這些都是all?
,any?
,count
和更大量的:http://ruby-doc.org/core-1.9.3/Enumerable.html
從文檔: 可枚舉混入提供的集合類與幾個遍歷和搜索方法,以及排序的功能。這個類必須提供一個方法,每個方法都會產生收集的連續成員。
在C#中可枚舉
在C#
有一個叫LINQ
,它也提供這些方法All
,Any
,Count
和更多的功能。
如果你想讓你的課程「LINQ enabled
」你需要實現IEnumerable<T>
界面,這迫使你也提供一個方法GetEnumerator
它在概念上非常接近ruby方法。
所以從鳥類的角度來看,你的課程現在獲得了上面提到的所有方法。它是怎麼發生的?
好吧.NET
在IEnumerable<T>
接口上定義了所有那些LINQ
方法爲Extension Methods
。而且,由於你實現了這個接口,你現在「混入」所有這些方法。
我想知道這兩種方法的差異程度,如果有事情Ruby Mixins
能做到這一點C#'s
Interface
+ Extension Method
策略不能?那麼,除了Ruby Mixins
可以在運行時混合的事實。
我澄清了這個問題。希望現在更清楚。 – Christoph