scala> def f(x: Int, y: Int): Int =
| if(x == 55) x else y
f: (x: Int, y: Int)Int
scala> def yFn: Int = {println("y"); 42}
yFn: Int
調用f(55, yFn)
導致f
的評價,由y
打印輸出中。
scala> f(55, yFn)
y
res0: Int = 55
f
的簽名如何可以保持不變:
(Int, Int) => Int
但y
懶洋洋地評估沒有使y
一個by-name
參數?
你不能,除非有一些允許它的宏觀魔法。即使有一種方法我強烈建議不要這樣做,因爲這意味着明確違反了簽名合同和語言規範。 –
即使不推薦,我也有興趣看到這樣一個宏觀實現 - 爲了我自己的學習。 –
我甚至無法設想一種方法來處理宏。 –