我想创建一个具有以下签名的函数:
def myFunction[T](functionWithName: (String, => T)): T
这样我就可以这样称呼它,例如:val x = myFunction("abc" -> 4 * 3)
. 但是,Tuple 不接受 by-name 参数,因此上面的签名是无效的。
受这个答案的启发,我尝试了以下隐式转换:
implicit class ByName[T](getValue: => T) extends Proxy {
def apply(): T = getValue
def self = apply()
}
def myFunction[T](functionWithName: (String, ByName[T])): T = {
// do something
functionWithName._2()
}
但是,隐式在这种情况下不起作用(与链接答案不同)。
- 为什么隐式转换
ByName
不起作用? - 如何实现调用
myFunction("abc" -> 4 * 3)
where4 * 3
is pass by name 的预期效果?