Scala.js将Scala函数转换为JS函数

时间:2016-09-01 15:14:03

标签: scala.js

我知道隐式转化适用于js.FunctionN< - > scala.FunctionN。但是,如果我以动态的方式使用库(没有类型化的外观),他们不会帮助我,因为编译器显然不知道我需要转换。例如,如果JS代码需要一个带有字符串和函数作为输入的JS数组 - 类似于

['Hello world', function ($x, $y) {
    console.log($x + $y)
}],

,我无法在Scala中创建它:

    val a: js.Array[Any] = js.Array(
      "Hello world",
      (x: Int, y: Int) => {console.log(x + y)}
    )
  )

因为Scala函数不会转换为JS函数。是否存在一些显式转换方法,类似于toJSArray的可变Seq?我已经检查过asInstanceOf[js.Function]无法正常工作。

1 个答案:

答案 0 :(得分:4)

asInstanceOf不起作用,因为这基本上是说"此功能已经一个js.Function",这不是'是的。但是如果你给它一个明确的类型归属,这通常会正确转换,就像这样(避免尝试编译,但应该大致正确):

val a: js.Array[Any] = js.Array(
  "Hello world",
  { (x: Int, y: Int) => {console.log(x + y)} }:js.Function2[Int, Int, Unit]
)

它更多的是样板,但这总是没有外墙的成本...