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

Overloaded method value trigger with alternatives for '=> Unit' parameter

我刚刚将 Scala.rx 版本 0.3.2 升级到 0.4.0,然后我的 triggers 突然出现以下错误:

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

注意错误信息中的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)