2

我有一堆懒惰的 val 字符串,我想一次设置它们,并且在某些情况下应该将它们设置为null(我知道这不是 Scala 方式,但它是为了 Java 兼容性)

通常我可以以典型的多重赋值方式设置变量:

scala> val (a: String, b: String) = ("a", "b")
a: String = a
b: String = b

一旦我在混合中添加一个空值,一切都会变得混乱:

scala> val (a: String, b: String) = (null, null)
<console>:12: error: pattern type is incompatible with expected type;
 found   : String
 required: Null
       val (a: String, b: String) = (null, null)
               ^
<console>:12: error: pattern type is incompatible with expected type;
 found   : String
 required: Null
       val (a: String, b: String) = (null, null)

有没有办法将多个类型变量设置为空?

我猜这与设置多个变量所涉及的模式匹配有关,因为这很好:

scala> val a: String = null
a: String = null
4

5 回答 5

4

模式匹配有一个难题:

http://scalapuzzlers.com/#pzzlr-035

没有人提供显而易见的东西吗?

scala> val a,b,c: String = null
a: String = null
b: String = null
c: String = null

AIA 如果我遗漏了什么。

差异在 4.1 中指定。

于 2013-06-27T08:05:10.850 回答
2

工作选择

scala> val (a,b): (String,String) = (null, null)
a: String = null
b: String = null

scala> val (a, b) = (null: String, null: String)
a: String = null
b: String = null

scala> val (a,b) = (null, null): (String, String)
a: String = null
b: String = null
于 2013-06-27T07:10:16.817 回答
2

这种语法似乎有效。

scala> val (a, b) = (null, null): Tuple2[String,String]
a: String = null
b: String = null
于 2013-06-27T03:31:47.047 回答
2

为了更简洁,您可以使用以下语法:

scala> val a,b = null:String
a: String = null
b: String = null
于 2013-06-27T08:05:53.117 回答
1

您示例中的问题在于val (a: String, b: String). 您尝试指定变量的类型,但这种语法是元组的快捷方式。

如果要直接指定类型,可以使用这种语法:

scala> val (x, y): Tuple2[String, String] = (null, null)
x: String = null
y: String = null
于 2013-06-27T03:45:02.080 回答