Scala字符串拼接问题

4

这是我代码中难以找到的一个错误,但一旦我找到它,我很惊讶编译器没有捕捉到它或理解为什么它是有效的。

val my_string =
    "abc" +
    "def"
    "ghi"
< p >由于我错过了 "def" 后面的 + 符号,my_string 的值最终成为了 "abcdef"。为什么编译器没有报错,"ghi" 又发生了什么?< /p >

现在将使用三重引号来包含多行字符串,以避免未来的错误。 - Mark Spangler
3
常见的做法是将表达式中的所有标记都用括号括起来,以避免出现问题,例如:val my_string = ( ... ) - Alex Boisvert
2个回答

10

代码是有效的,因为"ghi"本身就是一个有效的表达式。

如果这段代码在函数中(且没有后续语句),那么"ghi"是该函数的返回值。否则它被忽略(就像你单独写了一行42 + 23一样)。


它被声明为我的类内部的实例变量。我猜你不能引用它,它只会执行并继续前进? - Mark Spangler
@Mark:类体中的任何表达式都被视为构造函数的一部分。因此,每次创建您的类的实例时,表达式“ghi”都会被评估(这根本没有任何影响)。 - sepp2k
没错!我现在记得读过了 / 我很感激,谢谢。 - Mark Spangler

1
"

"ghi"只是一种字符串(String)类型的表达式,为什么编译器要抱怨呢?

"

因为在Java中它不是语句,所以可以推断如果你来自Java世界,编译器会失败。 - yura
@yura:是的,但这不是Java,你不应该把Scala看作是带有一些“扩展”的Java。我发现,如果你正在学习Scala,最有用的心态转变之一就是要理解所有东西都只是一个评估为某个值的表达式。 - hbatista

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接