那天我注意到了這個有趣的語法,用於指定Scala類的類型參數。用於指定類型參數的Scala中綴語法的名稱是什麼?
scala> class X[T, U]
defined class X
scala> new (Int X Int)
res1: X[Int,Int] = [email protected]
是否有這種語法的名稱?什麼是它的好用例?
那天我注意到了這個有趣的語法,用於指定Scala類的類型參數。用於指定類型參數的Scala中綴語法的名稱是什麼?
scala> class X[T, U]
defined class X
scala> new (Int X Int)
res1: X[Int,Int] = [email protected]
是否有這種語法的名稱?什麼是它的好用例?
下面是第7章「The Scala對象系統」中的「Programming Scala」(O'Reilly)中的一個示例,我們改編自Daniel Scobral的博客(http://dcsobral.blogspot .com/2009/06/catching-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)
要麼是一個內置的類型和此成語常見於某些功能的語言來替代拋出異常。請注意,您的Left和Right是Either的子類型。就我個人而言,我希望該類型被命名爲「或」,因此您可以編寫「Throwable或T」。
這只是infix應用程序的二進制類型的構造函數。與中綴應用方法一樣,當類型構造函數或方法的名稱包含標點符號時,它更常用。 2.8庫中的示例包括<:<
,<%<
和=:=
(參見scala.Predef
)。
哦,順便說一下,術語「infix」用於這些類型。 – 2010-07-08 03:21:42