表达式语句
语法
表达式可以出现在语句位置。
在 level-1 中,expression statement 的结束符只认:
;- 换行
\n - Windows 风格换行
\r\n
这意味着 level-0 那种“expr 后任意空白都可以开始下一个表达式”的规则不再保留到 level-1。
语义
表达式语句的值会被丢弃,但其副作用仍保留。
因此,在 block 中需要“执行但丢弃结果”时,直接写表达式语句即可;level-1 不再把 let _ = expr 作为首选表面写法。
statement 边界必须可由显式分号或行结束稳定决定,而不能依赖任意空白分隔。
特别地,call expression 在行结束处默认终止;下一行出现的大括号不会被自动回接为上一行 call 的 trailing closure,即使该大括号以 {| 起手也一样。
level-1 只在少数明确情形下抑制“行结束即终止”的默认规则:
- 当前仍处于未闭合的
([{内部 - 当前行以明确的续接运算符结束,例如
|>
此外,某些 literal token 自身也会在词法层吞掉换行,例如允许多行的字符串字面量;这类情况不属于 layout 续接,而属于 token 尚未闭合。
除此之外,行结束默认终止当前 expression statement。