javascript - 如何在本例中使用 org.singlespaced.d3js 的数据函数实例化 scala.scalajs.js.ThisFunction3
问题描述
scala.scalajs.js.ThisFunction3
在以下示例中实例化 a 时我遇到了一点问题(使用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
解决方案
js.ThisFunction2
您要获取的 具有接收者Node|js.Array[Resource]
类型的类型。因此,您的箭头函数需要接受该特定类型的参数(或超类型,因为参数类型是逆变的):
{(n: Node|js.Array[Resource], r: js.UndefOr[Resource], i:Int) => ""}
将编译。
当然,这意味着您的函数主体必须处理Node
sjs.Array[Resource]
等。这就是函数类型所说的,因此可以预期:该函数的调用者可以使用 aNode
或 a调用它js.Array[Resource]
,因此您的函数必须能够同时处理这两者。
推荐阅读
- gitlab - 如何允许某些特定用户登录 Gitlab?
- c++ - 是否期望 Boost 正则表达式空白字符类也匹配垂直制表符
- powershell - 编写 powershell 脚本来监控日志文件
- r - R 累积和,但顺序相反
- list - SwiftUI - 未取消选择列表项
- nest-device-access - 无法接收设备访问事件
- java - 如何创建值传递的单元测试?
- python - 将 sample_weight 用于 keras 循环神经网络
- sql - 按年/月和用户对数据进行计数和分组
- python-3.x - 发生异常:UnicodeDecodeError 'utf-8' codec can't decode byte 0xf1 in position