【问题标题】:How to instantiate scala.scalajs.js.ThisFunction3 in this example using org.singlespaced.d3js' data function在这个例子中如何使用 org.singlespaced.d3js 的数据函数来实例化 scala.scalajs.js.ThisFunction3
【发布时间】:2018-10-05 14:23:19
【问题描述】:

在以下示例中实例化scala.scalajs.js.ThisFunction3 时遇到了一点问题(使用org.singlespaced.d3js

val selection = myG.selectAll(".res")
   .data[Resource]((r: Container, i: Int) => r.resources.toJSArray, 
      {(n: Node, r: Option[Resource], i:Int) => ""}  // (*) this results in a type mismatch
         : ThisFunction2[Node|js.Array[Resource],js.UndefOr[Resource], Int, String])

myG 是一个Selection[Container]Container 有一个List[Resource] 字段。

我尝试将标有 (*) 的行替换为以下代码:

 {(n: js.Array[Resource], r: js.UndefOr[Resource], i:Int) => ""}

 {(n: List[Resource], r: Option[Resource], i:Int) => ""}

到目前为止,我尝试的所有操作都导致类型不匹配错误。任何帮助将不胜感激。

编辑:

以下是数据函数的定义方式:

  def data(): js.Array[Datum] = js.native
  def data[NewDatum](data: js.Array[NewDatum]): Update[NewDatum] = js.native
  def data[NewDatum](data: js.Array[NewDatum], key: js.ThisFunction2[dom.Node|js.Array[NewDatum],js.UndefOr[NewDatum], Int, String]): Update[NewDatum] = js.native
  def data[NewDatum <: Datum](data: js.Array[NewDatum], key: js.Function2[Datum, Int, String]): Update[NewDatum] = js.native
  def data[NewDatum](data: DatumFunction[js.Array[NewDatum]]): Update[NewDatum] = js.native
  def data[NewDatum](data: DatumFunction[js.Array[NewDatum]], key: js.ThisFunction2[dom.Node|js.Array[NewDatum],js.UndefOr[NewDatum], Int, String]): Update[NewDatum] = js.native

【问题讨论】:

    标签: javascript scala d3.js scala.js


    【解决方案1】:

    您要获取的js.ThisFunction2 的接收者类型为Node|js.Array[Resource]。因此,您的箭头函数需要接受该特定类型的参数(或超类型,因为参数类型是逆变的):

    {(n: Node|js.Array[Resource], r: js.UndefOr[Resource], i:Int) => ""}
    

    将编译。

    当然,这意味着你的函数体必须处理Nodes 和js.Array[Resource] 一样。这就是函数类型的含义,因此可以预期:该函数的调用者可以使用Nodejs.Array[Resource] 调用它,因此您的函数必须能够同时处理两者。

    【讨论】:

    • 完美运行。我觉得自己有点愚蠢,没有注意到自己……非常感谢。 :)
    猜你喜欢
    • 2019-03-02
    • 2013-04-25
    • 2020-08-15
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2022-01-21
    • 2020-07-17
    • 2015-08-28
    相关资源
    最近更新 更多