“:”在类型参数中

时间:2010-09-26 14:51:41

标签: scala context-bound

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

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

有人可以解释[A:资源:清单]的含义吗?

2 个答案:

答案 0 :(得分:18)

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 text 7.4上下文界限和查看界限以获取更多信息。

答案 1 :(得分:4)

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

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

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

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

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

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