基本上我想要编写一个可以这样写的函数:
{ println(_) } =: thing
我希望它实际执行的是 thing.=:(println(_))
。为了论证这一点,假设=:
有以下实现:
def =:(block : Int => Any) {
block(5)
}
我尝试按照上述方式调用,但出现了以下结果:
<console>:10: error: type mismatch;
found : Unit
required: Int => Any
println(_) =: thing
我接着试着这样做:
thing.=:(println(_))
这样我就可以在终端上得到一个漂亮的5
。然后我尝试了这个:
{ value => println(value) } =: thing
这次再次失败并告诉我有一个“缺少参数类型”。我猜测这是因为Scala在这种情况下首先尝试解析/编译函数参数,并且不像使用点运算符调用时那样猜测类型(这里完全是我的猜测)。
有人可以详细说明这里的问题,同时也可以建议实现接近原始目标的最佳方法吗?
P.S. 对于标题抱歉,我会在更好地理解问题后重命名它。