Javascript 如何在本例中使用org.singlespaced.d3js'实例化scala.scalajs.js.ThisFunction3;数据函数

Javascript 如何在本例中使用org.singlespaced.d3js'实例化scala.scalajs.js.ThisFunction3;数据函数,javascript,scala,d3.js,scala.js,Javascript,Scala,D3.js,Scala.js,在下面的示例中(使用org.singlespaced.d3js)实例化scala.scalajs.js.ThisFunction3时,我遇到了一个小问题 val selection=myG.selectAll(“.res”) .data[Resource]((r:Container,i:Int)=>r.resources.toJSArray, {(n:Node,r:Option[Resource],i:Int)=>“”}/(*)这会导致类型不匹配 :ThisFunction2[Node | js

在下面的示例中(使用
org.singlespaced.d3js
)实例化
scala.scalajs.js.ThisFunction3时,我遇到了一个小问题

val selection=myG.selectAll(“.res”)
.data[Resource]((r:Container,i:Int)=>r.resources.toJSArray,
{(n:Node,r:Option[Resource],i:Int)=>“”}/(*)这会导致类型不匹配
:ThisFunction2[Node | js.Array[Resource],js.UndefOr[Resource],Int,String])
myG是一个
选择[Container]
,而
Container
有一个
列表[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](数据:js.Array[NewDatum]):Update[NewDatum]=js.native
def data[NewDatum](数据:js.Array[NewDatum],键:js.ThisFunction2[dom.Node | js.Array[NewDatum],js.UndefOr[NewDatum],Int,String]):Update[NewDatum]=js.native

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

{(n:Node | js.Array[Resource],r:js.UndefOr[Resource],i:Int)=>“”
将编译


当然,这意味着您的函数体必须处理
Node
s和
js.Array[Resource]
这两个类。这就是函数类型所说的,因此我们期望:该函数的调用方可以使用
节点
js.Array[Resource]调用它
,所以您的函数必须能够同时处理这两个问题。

工作得很好。我自己没有注意到这一点,感到有点愚蠢……非常感谢。)