对于我对Kotlin的数学算术常识,我有一个基本问题:
我正在写一个方程式,但我在第二行上错误地加了加号,这导致我的方程式无法如以下示例所示工作:
val x = 2 + 3 //x = 5 CORRECT
val x = 2 +
3 //x = 5 CORRECT
val x = 2
+ 3 //x = 2 WRONG
我的问题是:为什么Kotlin在最后一个示例中没有显示任何错误消息? Kotlin如何解释“ +3”行?
答案 0 :(得分:4)
val x = 2
是正确的表达式,因此编译器将其用作完整表达式。
+ 3
是正确的表达式,尽管它什么也不做。
val x = 2 +
是未完成的表达式-编译器正在尝试使用下一行完成它。
答案 1 :(得分:1)
这是Kotlin在行尾采用分号的一种不幸结果。
在Java之类的语言中,每个语句都必须以分号结尾,因此没有歧义。
Kotlin allows可以省略分号,这很方便。但这有点急于求成:它会在每行的末尾推断一个单独有意义的行,而忽略以下几行。对于那些喜欢将运算符放在行首而不是行尾的人来说,这很烦人。
在大多数情况下,下一行本身并没有多大意义,因此会出现编译器错误,以警告您该问题。不幸的是,您发现以下行 有效的罕见情况之一,因此没有错误! (Kotlin有一个unary plus来匹配其一元减号,因此+3
是一个与-4
一样的数字。而一个数字本身就是有效的表达式.Kotlin计算该值,然后丢弃它。)
解决方案是:
我发现做最后一个的最好方法是使用括号:
val x = (2
+ 3)
它看起来很尴尬,但在较长的表达式上却能很好地工作-不理想,但有必要,除非/直到Kotlin对在哪里使用分号变得更聪明为止。