用于指定类型参数的Scala中缀语法的名称是什么?

时间:2010-07-08 02:45:25

标签: scala syntax

前几天我注意到了这个有趣的语法,用于指定Scala类的类型参数。

scala> class X[T, U]
defined class X

scala> new (Int X Int)
res1: X[Int,Int] = X@856447

这种语法有名称吗?它的用例是什么?

2 个答案:

答案 0 :(得分:11)

它只是二进制类型构造函数的中缀应用程序。与中缀应用方法一样,当类型构造函数或方法的名称包含标点符号时,更常用。 2.8库中的示例包括<:<<%<=:=(请参阅scala.Predef)。

答案 1 :(得分:3)

以下是“Scala编程”(O'Reilly)的例子,第7章“Scala对象系统”中的第158页,我们改编自Daniel Scobral的博客(http://dcsobral.blogspot .com / 2009/06 /追赶exceptions.html):

// code-examples/ObjectSystem/typehierarchy/either-script.scala
def exceptionToLeft[T](f: => T): Either[java.lang.Throwable, T] = try { Right(f)
} catch {
}
case ex => Left(ex)
def throwsOnOddInt(i: Int) = i % 2 match { case 0 => i
}
case 1 => throw new RuntimeException(i + " is odd!")
for(i <- 0 to 3) exceptionToLeft(throwsOnOddInt(i)) match {
}
case Left(ex) => println("exception: " + ex.toString) case Right(x) => println(x)

要么是内置类型,这个习惯用法在某些函数式语言中很常见,作为抛出异常的替代方法。请注意,左和右是Either的子类型。就个人而言,我希望这个类型被命名为“Or”,所以你可以写“Throwable Or T”。