параметр вызова по имени - PullRequest
       1

параметр вызова по имени

2 голосов
/ 07 февраля 2012

Кто-нибудь может дать мне объяснение, как работает вызов по имени внутри компилятора scala?Синтаксический ярлык для этого метода будет таким: arg: =>Int будет преобразован в arg: () => Int и фиксирует переданный параметр функции, как замыкание?т.е. реальный тип параметра call-by-name такой: Function0[_]?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 07 февраля 2012

Параметры вызова по имени, как вы сами обнаружили, снижаются до Function0[A]. У них нет поддержки первого класса, и, следовательно, нет другого типа как такового.

Вы можете что-то достичь в этом направлении, используя Name из Scalaz. Для этого смотрите принятый ответ здесь .

3 голосов
/ 07 февраля 2012

Если я правильно понимаю вопрос, да, синтаксис => Int - это, по сути, упрощенный синтаксис для анонимной функции без параметров () => Int, которая представлена ​​типом Function0[Int] в Scala. Кроме того, в имени виртуальной машины параметры переводятся во внутренние классы.

1 голос
/ 08 февраля 2012

Нет такой вещи, как "тип по имени". By-name - это не тип, это режим передачи параметров.

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

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