背景:我正在将scala.js / scalatags与 scala.rx 一起使用。我想要实现的是Var
使用运算符样式将值从 html 输入绑定到 Rx 。这就是我要做的:
implicit class BoundHtmlInput(input: Input) {
def bindTextTo(v: Var[String]): Input = {
input.oninput = { (e: dom.Event) => v() = input.value}
input
}
def bindNumberTo(v: Var[Int]): Input = {
input.oninput = {(e: dom.Event) => v() = input.valueAsNumber}
input
}
def ~>[T](v: Var[T])(implicit ev: T =:= Int): Input =
bindNumberTo(v.asInstanceOf[Var[Int]])
def ~>[T](v: Var[T])(implicit ev: T =:= String): Input =
bindTextTo(v.asInstanceOf[Var[String]])
}
它适用于方法调用,但不适用于操作员~>
调用。错误如下:
Error:(43, 70) ambiguous reference to overloaded definition,
both method ~> in class BoundHtmlInput of type [T](v: rx.Var[T])(implicit ev: =:=[T,String])org.scalajs.dom.html.Input
and method ~> in class BoundHtmlInput of type [T](v: rx.Var[T])(implicit ev: =:=[T,Int])org.scalajs.dom.html.Input
match argument types (rx.core.Var[String])
而且我对两者的使用都不满意asInstanceOf
。
我希望这提供了足够的背景。我的问题是,实现我想要的更好的方法是什么?