gpt4 book ai didi

scala - Thunk 与函数重载

转载 作者:行者123 更新时间:2023-12-01 09:23:58 24 4
gpt4 key购买 nike

我想定义一个重载方法,一个接受 function0,一个接受 function1,即:

def produces(f: Context => Any): Processor = ...

def produces(thunk: => Any): Processor = ...

这编译得很好,因为第一个被编译为使用 Function1,第二个被编译为使用 Function0,但是当我想调用时问题出现了,因此:

produces {
ctx => "hello"
}

给我一​​个

missing parameter type

接受输入的参数只有一个,为什么不能推断。

关于我可以做些什么来解决这个问题的任何提示(除了重命名其中一种方法:))

最佳答案

这看起来有点傻,但您可以(笨拙地)通过要求隐式转换为 I-can-take-anything-anything-by-name 版本来帮助编译器的搜索策略:

object Test {
implicit def low_priority_conversion(t: Test.type) = LowPriority
object LowPriority {
def produces(x: => Any) : Boolean = false
}
def produces(f: String => Any): Boolean = true
}

无论您是否import Test._,您都会发现您有正确的行为:

scala> Test.produces("fish")
res0: Boolean = false

scala> Test.produces(_.length)
res1: Boolean = true

scala> import Test._
import Test._

scala> produces("fish")
res2: Boolean = false

scala> produces(_.length)
res3: Boolean = true

关于scala - Thunk 与函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com