我是新手和學習ruby。希望對問題有更好的理解。我不明白使用可比較的mixin和可枚舉的mixin。我的意思是,當我們需要使用它們時,我們不會在課堂上包括這些,對吧?如果我們想比較兩個對象,我們簡單地寫x> y。那麼明確使用它們有什麼用?理解可比較的mixin和可枚舉mixin
4
A
回答
5
這兩個mixin的要點是它們給你一大堆方法,而你只需要自己實現一個方法。
沒有你要定義>
,<
,>=
,在你的類<=
和==
,而如果包括Comparable
你只需要定義<=>
的Comparable
混入。 Comparable
包含那些其他方法的實現,基於您的<=>
方法。
同樣用枚舉,你只需要定義each
,作爲回報,你會得到map
,inject
,partition
,reject
等等
6
大問題阿卡什!
有時並不是「簡單」的兩個對象如何比較!如果你有一堂狗課?你如何比較兩個Dog實例?基於什麼應該是比較?比較他們的名字就足夠了嗎?他們的品種?他們的DNA?這真的取決於你。那就是當你可以在你的模型中包含Comparable並且實現你自己所需的最小函數來定義使兩個Dog實例相同的原因。你定義了比較。一旦你在你的模塊中定義了< =>比較器,那麼你的對象可以進行比較以得到相等的結果,或者進行排序或排序,因爲ruby會知道如何比較一個實例和另一個實例。
同樣,包含Enumerable模塊允許您的類能夠遍歷其實例的集合。一旦你在你的類中實現了每個方法,你就可以在你的類中使用整個Enumerable模塊的方法。諸如map/collect之類的方法可以在你的課堂上使用。
class Dog
include Enumerable
attr_accessor :puppies, :name
def initialize(name)
@name = name
@puppies = []
end
def each(&block)
@puppies.each do |puppy|
puts "yielding #{puppy}"
yield(puppy)
puts "just yielded #{puppy}"
end
end
end
tommy = Dog.new("tommy")
tommy.puppies = ["julie","moti","husky"]
tommy.each do |p|
puts p
end
big_puppies = tommy.map{|x| x.titleize }
+0
現在我明白了更多。非常感謝你的寶貴時間。這個解釋幫助了我很多。 – 2012-07-31 13:03:26
相關問題
- 1. 在Ruby中的類級別添加可枚舉mixin
- 2. 我可以比較MySQL枚舉嗎?
- 3. 在Sass mixin中處理可選參數
- 4. 較少的CSS變量封裝和可重用的mixin
- 5. @mixin僞元素可能
- 6. 我可以啓用警告來比較枚舉值和非枚舉值嗎?
- 7. 比較枚舉值
- 8. css較少mixin的字體
- 9. beforeRouteLeave和mixin
- 10. 包含所有枚舉類中的新mixin
- 11. 比較SpEL中的枚舉
- 12. MySQL的比較枚舉
- 13. 可可枚舉
- 14. 快速枚舉的順序和比較
- 15. 解析爲可空枚舉
- 16. 是LESS中可變的mixin名稱嗎?
- 17. VueJS中的全局可用mixin
- 18. 無法理解可比性,比較
- 19. C#枚舉標誌比較
- 20. 比較一個JsonArray枚舉
- 21. 比較對象枚舉
- 22. 比較枚舉與iteratee包
- 23. jsp。枚舉比較/平等
- 24. 紅寶石「枚舉」比較
- 25. 如何比較枚舉值?
- 26. 與枚舉值JSTL比較
- 27. 比較嵌套枚舉
- 28. 比較Java枚舉值
- 29. 如何比較XML枚舉和Java枚舉?
- 30. Mixin bootstrap 3類 - 未聲明的mixin
或者像弗雷德所說的那樣簡潔 – 2012-07-31 12:12:46
謝謝弗雷德,很好的解釋。我相信我現在瞭解得更多,並對這個主題有了清晰的認識。我希望我能夠在我的項目中明智地實施它。 – 2012-07-31 13:03:07