无效功能的Scala语法?

时间:2011-09-05 11:04:15

标签: scala

在Scala中是否有一些标准方法来指定一个什么都不做的函数,例如在实现特征时?这有效:

trait Doer {
  def doit
}

val nothingDoer = new Doer {
  def doit = { }
}

但也许还有一些更合适的方式来制定什么呢?

编辑出现了一些有趣的答案,我在回答中添加了一些问题。首先,事实证明我可以在Doer中使用默认实现。好的提示,但你并不总是那么想。其次,显然更惯用的写作方式是:

val nothingDoer = new Doer {
  def doit { }
}

第三,虽然没有人提出这一点,但我发现这似乎也有效:

val nothingDoer = new Doer {
  def doit = Unit
}

这是一个不错的选择吗?

(我认为,有些人建议的“单位”并没有真正添加任何东西。)

4 个答案:

答案 0 :(得分:11)

由于您的返回类型为单位,因此通常不使用=

val nothingDoer = new Doer {
  def doit {}
}

答案 1 :(得分:2)

我不知道这样做的更惯用的方法(我认为没有相当于Python的'pass',即。)。

但您可以使用“单位”来指定方法在特征中不返回任何内容:

def doit: Unit

答案 2 :(得分:2)

如果您经常“无所事事”对象,您也可以“无所事事”作为默认实现:

trait Doer {
  def doit {}
}

val nothingDoer = new Doer

答案 3 :(得分:0)

基本上你想要这样的东西:

trait Doer {
    def doit : Unit
}

您也可以考虑查看类型选项。