如何使用org.singlespaced.d3js'在此示例中实例化scala.scalajs.js.ThisFunction3。数据功能

时间:2018-04-25 07:43:33

标签: javascript scala d3.js scala.js

我在以下示例中实例化third-party时遇到一些问题(使用scala.scalajs.js.ThisFunction3

org.singlespaced.d3js

myG是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]) Selection[Container]Container字段。

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

List[Resource]

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

修改

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

将编译。

当然,这意味着你的函数体必须处理Nodejs.Array[Resource]。这就是函数类型所说的内容,因此可以预期:该函数的调用者可以使用Nodejs.Array[Resource]来调用它,因此您的函数必须能够处理它们。