可能重复:
做什么<:<lt;%<,和=:=Scala 2.8中的平均值,它们记录在哪里?
我不明白=:=[A,B]代表什么,它怎么有用。我做了一些研究,但很难搜索到没有字母数字字符的东西。有人能帮我举一个真实的例子吗?
从Scala 2.8开始,参数化类型通过广义类型约束类获得了更多的约束功能。这些类实现了方法的进一步专业化,并补充了上下文边界,如下所示:
A=:=B断言A和B必须是相等的
A<:<B断言A必须是B 的子类型
这些类的示例用法是实现在集合中添加数字元素的专业化,或实现定制的打印格式,或允许对交易员投资组合中的特定赌注或基金类型进行定制的负债计算。例如:
case class PrintFormatter[T](item : T) {
def formatString(implicit evidence: T =:= String) = { // Will only work for String PrintFormatters
println("STRING specialised printformatting...")
}
def formatPrimitive(implicit evidence: T <:< AnyVal) = { // Will only work for Primitive PrintFormatters
println("WRAPPED PRIMITIVE specialised printformatting...")
}
}
val stringPrintFormatter = PrintFormatter("String to format...")
stringPrintFormatter formatString
// stringPrintFormatter formatPrimitive // Will not compile due to type mismatch
val intPrintFormatter = PrintFormatter(123)
intPrintFormatter formatPrimitive
// intPrintFormatter formatString // Will not compile due to type mismatch
你可以在这里找到一个关于Scala类型的简短课程:http://scalabound.org/?p=323
=:=[A,B]
类是A
和B
为同一类的证据。参见例如。http://apocalisp.wordpress.com/2010/06/10/type-level-programming-in-scala-part-2-implicitly-and/以获得解释。
很难找到一些例子。这里有一个小代码:
- http://scala-programming-language.1934581.n4.nabble.com/Type-Level-Programming-Problem-td3207141.html
- http://michid.wordpress.com/2010/06/18/type-level-programming-equality/
最好的办法是查看Predef的来源。在那里你可以找到这个:
object =:= {
implicit def tpEquals[A]: A =:= A = new (A =:= A) {def apply(x: A) = x}
}
因此,类型A=:=B的对象只有在A和B是同一类型时才隐式可用。