我發現這種代碼在Lift框架中很常見,寫成這樣:
object BindHelpers extends BindHelpers {}
這是什麼意思?爲什麼人們定義對象擴展其伴侶類?
8
A
回答
2
object
擴展其伴侶類是有趣的,因爲它將具有與類相同的類型。
如果object BindHelpers
未延伸BindHelpers,它將是BindHelpers$
類型。
2
可能是這裏的模式是其他模式。我不知道Lift是回答這個問題的,但是object
有一個問題,那就是他們不是可以嘲笑的。所以,如果你定義了一個可以被模擬的class
中的所有東西,然後讓對象擴展它,你可以模擬這個類並在測試中使用它來代替對象。
6
在這種情況下,BindHelpers
是一個特質,而不是一個類。假設foo()
是一個在BindHelpers
中定義的方法,您也可以訪問它。
使用它通過同伴對象:
BindHelpers.foo()
混合性狀
BindHelpers
的一類,因而能夠訪問它裏面的方法。
例如:
class MyClass extends MyParentClass with BindHelpers {
val a = foo()
}
相同的技術在Scalatest用於ShouldMatchers
例如。
3
對於liftweb組中的同一問題,您可以找到David Pollak's answer。
相關問題
- 1. 什麼是伴侶對象,爲什麼我們需要它?
- 2. 爲什麼我沒有看到擴展類的伴侶對象組件?
- 3. Scala:在伴侶對象中獲得伴侶類
- 4. 無法從伴侶對象訪問伴侶類的方法
- 5. 伴侶對象到私人類:爲什麼它不是有效的?
- 6. scala:防止伴侶對象隱藏原始類的定義
- 7. 訪問類型的伴侶對象
- 8. 作爲scala工廠的伴侶對象
- 9. 爲什麼人們在模塊定義中使用擴展?
- 10. 斯卡拉類擴展與伴侶的宏擴展:類型未找到
- 11. scala如何對待伴侶對象?
- 12. Scala伴侶對象與Vs. Scala的新對象類
- 13. BB伴侶爲WordPress
- 14. Eclipse Scala IDE「無法找到其伴侶伴侶庫」
- 15. 從伴侶對象獲取隱式val
- 16. 斯卡拉伴侶對象模板(Iterator.tabulate)
- 17. Scala:伴侶對象和「新」關鍵字
- 18. 何時使用/製作伴侶對象?
- 19. python中的MongoSpark伴侶對象
- 20. 爲什麼不能在Kotlin伴侶對象內部的對象在其他成員可以「靜態」訪問?
- 21. 擴展主義對象類
- 22. 找不到伴侶類
- 23. 伴侶中的隱式類
- 24. 爲什麼在伴侶對象中應用這兩種方法不起作用?
- 25. 爲什麼我們使用「伴侶對象」作爲Kotlin中Java靜態字段的一種替代品?
- 26. 類擴展名爲對象
- 27. Ruby擴展爲對象類
- 28. 斯卡拉:伴侶對象進行雙重F-界態類型
- 29. Scala:哪些類不應該有伴侶對象?
- 30. 斯卡拉類型別名包括伴侶對象[初學]
那麼這增加了什麼價值? – 2011-02-14 12:16:54
例如提供默認實現。 – Landei 2011-02-14 13:18:40