方法值重载触发器,带有“ =>单位”参数的替代项

时间:2018-12-11 09:26:29

标签: scala scala.js scala.rx

我刚刚将Scala.rx的0.3.2版本升级到0.4.0,突然在我的trigger上收到以下错误:

overloaded method value trigger with alternatives:
[error]   (f: Boolean => Unit)(implicit ownerCtx: rx.Ctx.Owner)rx.Obs <and>
[error]   (thunk: => Unit)(implicit ownerCtx: rx.Ctx.Owner)rx.Obs
[error]   cannot be applied to (() => org.scalajs.jquery.JQuery)
[error]   MyRx.trigger { () =>

对于我所有的方法调用,如下所示:

import rx.Ctx.Owner.Unsafe._

val MyRx: Var[Boolean] = Var[Boolean](false)

MyRx.trigger {
   // ...
   jQuery("#page_content").css("opacity", 1)
}

以某种方式我无法解决此问题。我该如何解决?

这似乎可行:

MyRx.trigger {
  // ...
  jQuery("#page_content").css("opacity", 1)
  ()
}

但是我肯定会喜欢这样的解决方案:

MyRx.trigger {
  // ...
  jQuery("#page_content").css("opacity", 1)
}: => Unit // doesnt compile

1 个答案:

答案 0 :(得分:0)

在错误消息中注意MyRx.trigger { () =>。首先,您需要删除() =>部分(它也可能在{之后的下一行)。

=> Unit作为参数类型是一个别名参数,它会自动将{ ...; jQuery("#page_content").css("opacity", 1) }之类的块变成{ () => ...; jQuery("#page_content").css("opacity", 1) }

在这种情况下,似乎没有发生丢弃,您可以显式丢弃结果,例如

val _ = jQuery("#page_content").css("opacity", 1)

jQuery("#page_content").css("opacity", 1): Unit

如果要把它放在整个块上,语法会更难看:

MyRx.trigger({
   // ...
   jQuery("#page_content").css("opacity", 1)
}: Unit)