【问题标题】:":" in type parameter类型参数中的“:”
【发布时间】:2011-04-17 10:21:57
【问题描述】:

在 scala-arm 项目中,我看到这样的代码:

def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

有人能解释一下 [A : Resource : Manifest] 的含义吗?

【问题讨论】:

标签: scala context-bound


【解决方案1】:
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

意思

def managed[A](opener : => A)(implicit r: Resource[A], m: Manifest[A]) : ManagedResource[A] = new DefaultManagedResource(opener)

您可以查看link text7.4 上下文边界和视图边界了解更多信息。

【讨论】:

    【解决方案2】:

    用一个更简单的例子来说明:

    def method[T : Manifest](param : T) : ResultType[T] = ...
    

    符号T : Manifest 表示有一个上下文绑定。在程序的其他地方,在范围内,必须定义一个单例或 Manifest[T] 类型的值,该值被标记为隐式。

    这是通过编译器重写方法签名以使用第二个(隐式)参数块来实现的:

    def method[T](param : T)(implicit x$1 : Manifest[T]) : ResultType[T] = ...
    

    如您的示例所示,可以在同一个方法签名中使用多个上下文边界。也可以将它们与视图边界结合起来。

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      相关资源
      最近更新 更多