2013-09-19 2 views
1

Я пытаюсь напечатать аргумент вызова по имени передается функция, то есть:Захват представления вызова по имени аргумент

def testme(arg: => Int) println(arg) 

И называют это так:

test(sum(List(1, 2, 3)) 

При условии, что существует метод sum. Я хочу testme для печати sum(List(1, 2, 3)), а не сама сумма.

Есть ли способ достичь этого?

ответ

-1

Нет, это невозможно без взлома компилятора. Когда вы пройдете f: => A, вызов f немедленно оценит его. Он никогда не находится в промежуточной форме типа, который вам нужен, потому что scala скомпилирован до java-байтового кода, а не интерпретируется как язык сценариев.

Редактировать: Как отмечает Regis, взломать компилятор проще, чем на некоторых языках, поскольку scala предоставляет api компилятору с помощью scala-макросов. Это все еще довольно сложно, и вы, вероятно, лучше разбираетесь в своем решении по-другому.

+1

На самом деле это очень удобно, используя макросы scala (которые, как я полагал, могут считаться «без взлома компилятора») –

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