【发布时间】:2011-06-23 01:39:13
【问题描述】:
我的 DSL 中存在重载泛型方法的问题,导致编译器希望我添加显式参数类型:
def alpha[T](fun: Int => T): String = fun(33).toString
def beta [T](fun: Int => T): String = fun(66).toString
def beta [T](thunk: => T): String = thunk.toString
alpha { _ + 11 } // ok
beta { _ + 22 } // "error: missing parameter type for expanded function"
beta { _: Int => _ + 22 } // ok... ouch.
我有没有机会摆脱最后一行的混乱?
编辑:
为了证明重载对 scalac 本身来说不是一个模棱两可的问题,这里是一个没有类型参数的版本,它工作得非常好:
def beta(fun: Int => String): String = fun(66).reverse
def beta(thunk: => String): String = thunk.reverse
beta(_.toString) // ok
beta("gaga") // ok
【问题讨论】:
标签: generics scala overloading type-inference