Странное поведение с синтаксисом метода scala - PullRequest
2 голосов
/ 13 июня 2010

Я немного удивился синтаксису 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 Ответ

10 голосов
/ 13 июня 2010

Речь идет только о синтаксисе функции.

Если ваша функция имеет возвращаемое значение, вы всегда будете определять его как уравнение (используя = ), даже если после блока вычислений:

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

Обозначения

def func(...) { ...

является сокращением для типа возврата Unit, то есть функция без возвращаемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...