斯卡拉“晃来晃去”当地街区

时间:2009-10-06 13:03:20

标签: scala coding-style

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

val x = {val x =1;x+1}

此处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

两种情况之间的差异令人沮丧。 有时这两个代码段可以编译,例如,如果使用Iterator[Int]代替Range(0,1,1),则会使用scalac

我考虑过它并且找不到需要“悬空”本地块(即,其值不使用的本地块)的情况(或使代码更优雅)。

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

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

2 个答案:

答案 0 :(得分:5)

为什么不写

new Iterator[Int] {
  ...
}

修改: 这是Scala中编程使用的样式(请参阅sample chapter pdf

new RationalTrait {
  val numerArg = 1 * x
  val denomArg = 2 * x
}

Java Coding Conventions

  

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

答案 1 :(得分:3)

  {
    import my.crazy.implicit.functions._

    // use them...
  }

  // code I know isn't touched by them.