我剛發現它in the API,並希望看到一個或兩個示例以及解釋它的優點。如何使用特質scala.Proxy
8
A
回答
12
代理服務器性狀提供用於創建代表了有用的基礎,但請注意,它僅提供了Any
(equals
,hashCode
和toString
)中方法的實現。您將不得不自己實施任何其他轉發方法。代理服務器通常用於與pimp-my-library pattern:
class RichFoo(val self: Foo) extends Proxy {
def newMethod = "do something cool"
}
object RichFoo {
def apply(foo: Foo) = new RichFoo(foo)
implicit def foo2richFoo(foo: Foo): RichFoo = RichFoo(foo)
implicit def richFoo2foo(richFoo: RichFoo): Foo = richFoo.self
}
標準庫也包含了一組可用於創建收集代理(SeqProxy
,SetProxy
,MapProxy
等)有用的特徵。
最後,在scala-incubator中有一個編譯器插件(AutoProxy plugin),它將自動實現轉發方法。另見this question。
3
看起來好像你需要使用Haskell的newtype
類似的功能。
例如,以下Haskell代碼:
newtype Natural = MakeNatural Integer
deriving (Eq, Show)
可以粗略地對應於以下Scala代碼:
case class Natural(value: Int) extends Proxy {
def self = value
}
+0
所以這基本上是創建代表的機器? – 2010-10-10 15:22:06
+0
@JensSchauder,是的。 – missingfaktor 2013-03-13 07:08:31
相關問題
- 1. 特質類如何工作?
- 2. 如何強制一個特質來實現另一個特質
- 3. 特質特化如何實際工作?
- 4. 如何使用必須實現的@BeanProperty成員編寫特質?
- 5. 在PHP中使用最終的特質
- 6. 使用特質作爲Vec類型
- 7. python只使用特質的實時gui
- 8. 特質「應用/ Elasticquent特質」未找到laravel5.2和elasticsearch-2.3.2
- 9. 如何收集具有獨特性質
- 10. 你如何配合生鏽的特質?
- 11. 如何讓這個特質協變
- 12. 駝鹿特質
- 13. 內特質
- 14. 特質指針
- 15. 特質實施
- 16. 特質好壞?
- 17. 從特質
- 18. SciPy的 - 如何使基質與特定的行和列
- 19. 如何從材質角度使用paginator?
- 20. 如何使用角度材質列表
- 21. 圈JSON的特質
- 22. javascript中的特質
- 23. RAML特質定義
- 24. 阿爾特性質
- 25. 斯卡拉:讓特質依賴於其他特質
- 26. 如何在PHP中調用「父」特質方法?
- 27. 如何檢查隱/富含轉換,並用REPL實施特質
- 28. 斯卡拉:調用從通用特質
- 29. 使用特質的接口,用於數據庫實體
- 30. 通用特質的隱式轉換
該插件的當前活動版本是autoproxy-lite:https://github.com/kevinwright/Autoproxy-Lite – 2011-04-21 09:33:56