Scala.js中js和scala函数之间的互操作

时间:2015-02-18 10:30:45

标签: scala scala.js

我正在尝试按照Paths.js为我的库official guide编写一个类型化的外观。

根据Sebastien在Typed façade for JS library in Scala.js的建议,我能够充实部分API。我现在缺少的是一种处理API中公开的转换函数的方法。基本上,该库允许您编写类似

的内容
var pie = Pie({
  data: [
    { name: 'Italy', population: 59859996 },
    { name: 'Mexico', population: 118395054 },
    { name: 'France', population: 65806000 }
  ],
  accessor: function(x) { return x.population; },
  center: [20, 15],
  r: 30,
  R: 50
});

这个想法是 - 为了简化客户端代码 - 库不需要您将数据转换为适合绘图的表单。相反,您可以提供您认为合适的表单中的数据列表,然后传递accessor函数以从原始数据中提取数字。这也使得将路径对象与原始数据相关联变得更容易。

我想在Scala方面公开的签名如下所示:

object Pie {
  type Point = (Double, Double)
  def apply(data: Seq[A],
    accessor: A => Double,
    center: Point, r: Double, R: Double)
}

我正在尝试将类型为accessor的{​​{1}}转换为类似A => Double的内容,我的尝试看起来像是(使用js.Function1[js.Any, Double]和{{之间的隐式转换1}})

Function1

这给了我一个警告js.Function1

翻译此API的更好方法是什么?

1 个答案:

答案 0 :(得分:1)

要在评论中继续讨论:

在这种情况下,使用js.Function1[A, Double]完全有效且合理。

@sjrd引用Scala.js doc

  

JS traits及其方法可以有类型参数,抽象类型成员和类型别名,与Scala的类型系统相比没有限制。