这是一个在我的代码中发现的相当困难的错误,但是一旦我发现它,我很惊讶编译器没有捕获它或了解它为什么有效。Scala字符串Concatenation问题
val my_string =
"abc" +
"def"
"ghi"
的my_string
的价值最终是"abcdef"
因为我"def"
后错过了+
迹象。为什么没有编译器抱怨,"ghi"
发生了什么?
这是一个在我的代码中发现的相当困难的错误,但是一旦我发现它,我很惊讶编译器没有捕获它或了解它为什么有效。Scala字符串Concatenation问题
val my_string =
"abc" +
"def"
"ghi"
的my_string
的价值最终是"abcdef"
因为我"def"
后错过了+
迹象。为什么没有编译器抱怨,"ghi"
发生了什么?
该代码有效,因为"ghi"
本身就是一个有效的表达式。
如果这是一个函数内部(而不是其他任何内容),那么"ghi"
是该函数的返回值。否则就会被忽略(就像你自己写了42 + 23
一样)。
它在我的类中被声明为一个实例变量。我想你会无法参考它,它会执行并继续前进? – 2010-11-10 16:24:26
@Mark:类体中的任何表达式都被认为是构造函数的一部分。所以每次创建类的一个实例时,都会评估表达式''ghi''(它根本没有任何影响)。 – sepp2k 2010-11-10 16:32:03
没错!我记得现在读/我感谢它,谢谢 – 2010-11-10 16:37:47
现在在三重引号括多行字符串,以避免将来错误 – 2010-11-10 16:47:22
通常的做法是包在括号内的表达式的所有令牌,以避免这样的问题,例如,VAL my_string =( ...) – 2010-11-10 20:27:29
@Alex好主意啊! – 2010-11-10 22:39:11