斯卡拉"晃来晃去"当地街区

Ela*_*ich 2 coding-style scala

在scala中,可以在函数中定义局部块.例如,本地块评估最后的语句

val x = {val x =1;x+1}
Run Code Online (Sandbox Code Playgroud)

这里x==2,内部val x是该块的本地.

但是,在编写匿名类时,这些本地块可能会导致漏洞.例如(来自scala的参考)

new Iterator[Int]
{...} // new anonymous class inheriting from Iterator[Int]

new Iterator[Int]

{...} //new Iterator[Int] followed by a "dangling" local block
Run Code Online (Sandbox Code Playgroud)

两种情况之间的差异令人沮丧.有时,如果不是那些两段代码可以编译,例如Iterator[Int],Range(0,1,1)被使用.

我想到了它,并且找不到需要"悬空"本地块(即,其值不使用的本地块)(或使代码更优雅)的情况.

是否存在我们需要本地块而不使用其值(并且不将其放在不同的函数中并调用此函数)的情况?我会很高兴举个例子.

如果没有,我认为每当scalac遇到"悬空"本地区块时发出警告(甚至禁止altogther)会很好.我错过了什么吗?

Eug*_*ota 5

为什么不写

new Iterator[Int] {
  ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是Scala中编程使用的样式(参见pdf示例章节)

new RationalTrait {
  val numerArg = 1 * x
  val denomArg = 2 * x
}
Run Code Online (Sandbox Code Playgroud)

Java编码约定.

打开括号"{"出现在与声明语句相同的行的末尾