代码之家  ›  专栏  ›  技术社区  ›  sergeda

将函数从scala.js传递到javascript函数?

  •  1
  • sergeda  · 技术社区  · 6 年前

    我在scala.js中定义了如下函数:

    val myFunction: js.Function1[js.Array[String], Boolean] = (data: js.Array[String]) => true
    

    并在页面上定义了javascript函数:

    function callFunction(inputFunction){
      console.log(inputFunction(["10"]))
    }
    

    当我从scala.js打电话时:

    GlobalScope.callFunction(myFunction)
    

    我搞错了:

    未捕获类型错误:inputfunction不是函数

    我做错了什么,怎么解决?

    定义 GlobalScope 以下内容:

    @JSGlobalScope
    @js.native
    object GlobalScope extends js.Any {
      def GlobalScope.callFunction(someFunction: (js.Array[String]) => Boolean): Unit = js.native
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   sjrd    6 年前

    定义 callFunction 在里面 GlobalScope 是错误的。它要求 js.Array[String] => Boolean ,这是一个 斯卡拉 功能来自 js.Array[String] Boolean ,不是javascript函数。当你叫它的时候,即使你给它一个 js.Function1[js.Array[String], Boolean] (这是正确的),scala类型系统将插入 js.Function1 scala.Function1 以符合预期的类型。但是当然,javascript代码 调用函数 接收scala函数,但不满意它。

    解决方法是确定 调用函数 采取 js.功能1 :

    @JSGlobalScope
    @js.native
    object GlobalScope extends js.Any {
      def callFunction(someFunction: js.Function1[js.Array[String], Boolean]): Unit = js.native
    }