我知道隐式转化适用于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]
无法正常工作。
答案 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]
)
它更多的是样板,但这总是没有外墙的成本...