【发布时间】:2011-05-16 20:57:45
【问题描述】:
我正在编写一个 Java 代码生成器。
我有一个不可变的 Map,其中包含从 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)) 开头)上给我一个错误:error: wrong number of arguments for <none>: (x: (java.lang.String, Option[java.lang.String]))Some[(java.lang.String, Option[java.lang.String])]
我不知道出了什么问题。
【问题讨论】:
-
您缺少括号。
Some(x,y)不是Some((x,y))。 -
我删除了问题中的 2.9.0,因为这并不特定于新版本的 scala
标签: scala pattern-matching scala-option