2015-06-29 4 views
-1

У меня есть следующая программа в Scala:Возвращаемое значение функции Scala

object Ch4 { 

     def main(args: Array[String]) { 
     println("Hello, world!") 
     val x = sortMap() 
     println(x) 
    }            //> main: (args: Array[String])Unit 

    def sortMap () { 
     val scores = scala.collection.immutable.SortedMap ("Alice" -> 10, "Fred" -> 7, "Bob" -> 3) 
     return scores 
    }            //> sortMap:()Unit 
} 

Я смущен, почему sortMap функция имеет возвращаемый тип Unit несмотр на Map. Также почему ничего не получается print в функции main.

+3

Вы должны использовать определение функции sortMap() = {...} ' – Lee

+0

После его изменения, I я получаю эту ошибку "метод sortMap имеет оператор возврата, нужен тип результата" – neel

+0

Ошибка удалена, но все еще ничего не печатается в основной функции на листе Scala – neel

ответ

1

Определения методов в форме def name() { ... } неявно возвращаются Unit. Вам нужно добавить тип возвращаемого и добавить =:

def sortMap(): SortedMap[String, Int] = { 
    val scores = scala.collection.immutable.SortedMap ("Alice" -> 10, "Fred" -> 7, "Bob" -> 3) 
    return scores 
} 

или просто:

def sortMap() = SortedMap("Alice" -> 10, "Fred" -> 7, "Bob" -> 3) 
+0

Что я читал в документации, так это то, что нам не нужно указывать возвращаемый тип функций в Scala. Только для рекурсивных функций возвращаемый тип является обязательным. Тогда зачем это нужно здесь? – neel

+0

@neel - Это потому, что вы используете явный 'return', см. [Этот вопрос] (http://stackoverflow.com/questions/2209179/type-inference-on-method-return-type). Явные возвращения редко нужны в scala. – Lee

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