“Scala编程”介绍了分号推理的规则:
简而言之,除非满足下列条件之一,否则将行结尾视为分号:
但我找不到一个例子,在第二个条件下,谁可以举个例子? 我尝试了以下代码,因为*无法启动语句,但它失败了!
1 * 2
*3
答案 0 :(得分:3)
" scala编程"介绍了分号推理的规则:
简而言之,除非满足下列条件之一,否则将行结尾视为分号:
- 有问题的行以单词形式结束,作为语句的结尾不合法,例如句号或中缀运算符。
- 下一行以一个无法启动语句的单词开头。
- 该行在括号(...)或括号[...]内结束,因为它们无论如何都不能包含多个语句。
醇>
请注意,这是一个相当简化的视图。完整规则位于section 1.2 Newline Characters的Scala Language Specification。
但是我找不到一个例子,在第二个条件下,谁可以给出一个例子?
根据SLS:
可以开始声明的令牌是所有Scala令牌 ,除了以下分隔符和保留字:
catch
else
extends
finally
forSome
match
with
yield
,
.
;
:
=
=>
<-
<:
<%
>:
#
[
)
]
}
所以,一个例子可能是:
return 42
.toString()
这相当于
return 42.toString(); // returns the `String` "42"
和不
return 42; // returns the `Int` 42
.toString() // dead code
我尝试过以下代码,因为*无法启动语句,但失败了!
1 * 2 *3
是什么让你认为*
无法发表声明?请仔细阅读规范。方法调用完全合法地开始声明:
foo(bar)
有效,
也是如此*(3)
Ergo,*
可以开始声明。完整的例子:
object Test
def test = {
1 * 2
*(3)
}
def *(x: Int) = {
println(x)
x + 1
}
}
Test.test
// 3
//=> res0: Int = 4