Scala Возвращает пустую функцию с 0 параметрами, уродливый синтаксис? - PullRequest
11 голосов
/ 28 октября 2011

Учитывая метод, определенный следующим образом

 def descendEach(times:Int)(f:()=>Unit) {
      for (i <- 1 to times) {
          // other code
          f()
      }
   }

, когда я использую этот метод, я хочу иметь возможность писать

 gd.descendEach(20){
    println(gd.cost)
 }

, но компилятор scala только позволяет мне сойти с рук

  gd.descendEach(20){ () => 
    println(gd.cost)
 }

что некрасиво.Я что-то здесь упускаю?Можно ли написать это первым способом, который я представил?

1 Ответ

21 голосов
/ 28 октября 2011

Используйте следующий синтаксис:

def descendEach[T](times:Int)(f: => T)

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

def g() = 42
descendEach(20)(g)

Обратите внимание, что с этим синтаксисом вы просто используете f, а не f().

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