2010-06-13 3 views
2

я ударил немного причуда синтаксиса 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. Есть ли способ, которым я могу это исправить, или просто не указывать здесь тип возврата?

+4

BTW Ключевое слово "return" является излишним и может быть опущено. В отсутствие явного оператора return Scala возвращает последнее значение, вычисленное методом. Рекомендуемый стиль - избегать явных методов (особенно множественных возвратов). –

+0

Возможный дубликат [Когда использовать знак равенства в объявлении метода Scala?] (Http://stackoverflow.com/questions/944111/when-to-use-the-equals-sign-in-a-scala-method -declaration) –

ответ

10

Это просто синтаксис функции.

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

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

обозначения

def func(...) { ... 

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

+0

Спасибо Дарио. Ошибка Java-программиста в учебнике. – Ceilingfish

Смежные вопросы