Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala字符串缩合问题_Scala - Fatal编程技术网

Scala字符串缩合问题

Scala字符串缩合问题,scala,Scala,这是一个很难在我的代码中找到的bug,但是一旦我找到它,我很惊讶编译器没有捕捉到它,或者不理解它为什么是有效的 val my_string = "abc" + "def" "ghi" my_string的值最后变成了的“abcdef”,因为我错过了+在“def”之后的符号。为什么编译器没有抱怨,以及“ghi”发生了什么事?代码是有效的,因为“ghi”本身就是一个有效的表达式 如果这是在一个函数中(后面没有任何其他内容),则“ghi”是该函数的返回值。否则它就被忽略了(就

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

val my_string =
    "abc" +
    "def"
    "ghi"

my_string
的值最后变成了
的“abcdef”
,因为我错过了
+
“def”
之后的符号。为什么编译器没有抱怨,以及
“ghi”
发生了什么事?

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


如果这是在一个函数中(后面没有任何其他内容),则
“ghi”
是该函数的返回值。否则它就被忽略了(就像你自己在一行上写了
42+23

“ghi”只是一个字符串类型的表达式,编译器为什么要抱怨呢?

它被声明为我的类中的一个实例变量。我猜您将无法引用它,它将执行并继续执行?@Mark:类主体中的任何表达式都被视为构造函数的一部分。因此,每次创建类的实例时,都会计算表达式
“ghi”
(这根本没有任何效果)。没错!我记得我读过now/我很感激,thankswill现在将多行字符串用三个引号括起来,以避免将来出现错误。通常的做法是将表达式的所有标记都用括号括起来,以避免出现此类问题,例如,val my_string=(…)因为在java中它不是statment,所以假设编译器会失败是合乎逻辑的,如果您来自javaworld@yura:是的,但这不是Java,您不应该错误地将Scala视为带有一些“扩展”的Java。我发现,如果你在学习Scala,最有用的思想转变之一就是理解一切都只是一个表达式,它的计算结果是某个东西。