【问题标题】:How do I use the trait scala.Proxy如何使用特征 scala.Proxy
【发布时间】:2011-04-23 11:37:06
【问题描述】:

我刚刚找到它in the API,并希望看到一两个示例以及它的用途说明。

【问题讨论】:

    标签: scala dynamic proxy scala-2.8


    【解决方案1】:

    Proxy trait 为创建委托提供了有用的基础,但请注意,它仅提供 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。

    【讨论】:

    • 该插件的当前活动版本是 autoproxy-lite: github.com/kevinwright/Autoproxy-Lite
    • 关于如何使用 scala 2.11、2.12 和 2.13 今天最好地解决这个问题的任何想法?
    • pimp-my-library 链接现在已损坏。
    • @GrzegorzOledzki 我更新了链接,将其重定向到 Martin Odersky 2006 年关于该主题的博客文章。
    【解决方案2】:

    看起来你会在需要 Haskell 的 newtype 之类的功能时使用它。

    例如下面的 Haskell 代码:

    newtype Natural = MakeNatural Integer
                      deriving (Eq, Show)
    

    可能大致对应以下Scala代码:

    case class Natural(value: Int) extends Proxy {
      def self = value
    }
    

    【讨论】:

    • 所以这基本上是创建代表的机制?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2017-10-13
    • 2016-06-10
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多