我正在編寫Java代碼生成器。Scala選項[(A,B)]模式匹配
我有一個不可變的映射,它包含從java.sql.Types
[Int]到(String, String)
的元組映射,其中第一個值是Java類型,第二個是從其中導入該類型的Java包,如果默認情況下未導入(java.lang
):
val SqlTypesToJavaTypeNames =
Map(Types.BIGINT -> ("Long", None),
Types.BINARY -> ("byte[]", None),
Types.BIT -> ("Boolean", None),
Types.BOOLEAN -> ("Boolean", None),
Types.CHAR -> ("String", None),
Types.DATE -> ("Date", Some("java.sql.Date")),
Types.DECIMAL -> ("BigDecimal", Some("java.math.BigDecimal")),
Types.DOUBLE -> ("Double", None),
Types.FLOAT -> ("Float", None),
Types.INTEGER -> ("Integer", None),
Types.LONGNVARCHAR -> ("String", None),
Types.LONGVARCHAR -> ("String", None),
Types.NCHAR -> ("String", None),
Types.NUMERIC -> ("BigDecimal", None),
Types.NVARCHAR -> ("String", None),
Types.REAL -> ("Float", None),
Types.SMALLINT -> ("Short", None),
Types.SQLXML -> ("String", None),
Types.TIME -> ("Time", Some("java.sql.Time")),
Types.TIMESTAMP -> ("Timestamp", Some("java.sql.Timestamp")),
Types.TINYINT -> ("Byte", None),
Types.VARCHAR -> ("String", None))
我試圖模式匹配上搜索這個地圖,其中dataType
是從數據庫中的元數據java.sql.Types
值:
val (javaType, importType) =
SqlTypesToJavaTypeNames.get(dataType) match {
case Some(jType, Some(iType)) => (jType, iType)
case Some(jType, None) => (jType, null)
case None => throw new IllegalStateException("Unknown translation to Java type for SQL type " + dataType)
}
編譯器給我第一個錯誤case
(開始於case Some(jType, Some(iType))
):
我不知道什麼是錯的。
你缺少括號。 'Some(x,y)'不是'Some((x,y))'。 – 2011-05-16 21:02:06
我刪除了問題中的2.9.0,因爲這不是特定於新版本的scala – 2011-05-16 21:11:43