Scala 2.8 的新功能之一是上下文边界。什么是上下文绑定以及它在哪里有用?
当然,我首先搜索了(并发现例如this https://stackoverflow.com/questions/2961986/how-do-you-write-an-idiomatic-scala-quicksort-function/2962799#2962799)但我找不到任何真正清晰和详细的信息。
罗伯特的回答涵盖了上下文边界的技术细节。我将向您解释它们的含义。
在 Scala 中,视图绑定 (A <% B
)捕捉“可以被视为”的概念(而上限<:
捕捉“是一个”的概念)。上下文绑定 (A : C
) 表示关于类型的“有”。您可以将有关清单的示例阅读为“T
has a Manifest
“。您链接到的示例Ordered
vs Ordering
说明了差异。一个方法
def example[T <% Ordered[T]](param: T)
表示该参数可以看作是Ordered
。与之比较
def example[T : Ordering](param: T)
这表示该参数有一个关联的Ordering
.
在使用方面,建立约定需要一段时间,但上下文边界优于视图边界(视图边界现已弃用 https://issues.scala-lang.org/browse/SI-7629)。一个建议是,当您需要将隐式定义从一个作用域传输到另一个作用域而不需要直接引用它时,首选上下文绑定(对于ClassManifest
用于创建数组)。
考虑视图边界和上下文边界的另一种方式是,第一种方式从调用者的范围传输隐式转换。第二个从调用者的范围传输隐式对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)