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]调用它
,所以您的函数必须能够同时处理这两个问题。工作得很好。我自己没有注意到这一点,感到有点愚蠢……非常感谢。)