0
對於DSL,我需要隱式擴展函數值。例如:如何在不丟失類型推斷的情況下隱式擴展函數
trait PimpedFunction[-A, +B] extends Function1[A, B] {
def foo = 42
}
object PimpedFunction {
implicit def pimp[A, B](f: Function1[A, B]): PimpedFunction[A, B] =
new PimpedFunction[A, B] {
def apply(a: A) = f(a)
}
}
使用PimpedFunction
函數可以被定義爲這樣的:
def takes(f: PimpedFunction[String, Int]) = f.foo
的問題是在調用takes
的代碼。下面按預期工作:
takes((_: String).size)
但是,如果我在的Elid參數類型編譯失敗來推斷它:
takes(_.size)
我可以爲了幫助scalac的推斷改變什麼?
OBS:真正的使用情況與此有關:https://gist.github.com/xeno-by/4542402
謝謝!我標記爲正確,因爲它真正解決了我提出的問題。不幸的是,當'pimp'函數被實現爲宏時,它不起作用,但我會分別提出這個問題。 –