使用scala方法语法的奇怪行为

时间:2010-06-13 18:41:16

标签: scala

我点了一点scala的语法,我真的不明白

object Board {
   def getObjectAt(x:Int, y:Int):Placeable = return locations(x)(y)
}

工作正常。但

object Board {
   def getObjectAt(x:Int, y:Int):Placeable {
      return locations(x)(y)
   }
}

返回错误

Board.scala:8: error: illegal start of declaration
return locations(x)(y)

我发现一些东西说第二种形式说服scala编译器你试图指定一个扩展到返回类型Placeable。有没有办法解决这个问题,或者我应该避免在这里指定一个返回类型?

1 个答案:

答案 0 :(得分:10)

这只是功能语法。

如果您的函数有返回值,您将始终将其定义为等式(使用 = ),即使计算块如下:

object Board {
   def getObjectAt(x:Int, y:Int):Placeable = {
      return locations(x)(y)
   }
}

符号

def func(...) { ...

是返回类型Unit的简写,即函数没有返回值。