Скала странная фича с foreach.ожидаемое поведение или нет? - PullRequest
1 голос
/ 10 августа 2011
    def list = List(1,2,3,4).map(1+_).reverse.foreach((i:Int)=> println(i))

компилируется правильно, но ничего не выводит на экран. Это была опечатка с моей стороны, но я удивлен, что она скомпилирована вообще.

    def list = List(1,2,3,4).map(1+_).reverse.foreach((i:Int)=> println(i))
    println("--")
    list

показывает вывод как

   --
   5
   4
   3
   2

Значит, список стал функцией в этом случае? Это то, что я выводу по выводу, это не то, что я ожидал

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Да, list - это метод, который не принимает параметров. Основное различие между этим определением и простым присвоением ему val заключается в том, что оно будет оцениваться при каждом его использовании, поэтому каждый раз, когда вы ссылаетесь на list, вывод будет напечатан.

Как указано в комментарии ниже, его наименование list может вводить в заблуждение, поскольку foreach имеет тип возврата Unit. Это было бы так, независимо от того, как вы объявили list.

1 голос
/ 10 августа 2011

В таких случаях вы всегда можете явно указать тип для значения и увидеть, как компилятор жалуется на несоответствие типов.

0 голосов
/ 10 августа 2011

Определение метода не выполняет метод.Вы также должны вызвать метод.

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