2016-09-01 12 views
2

暗黙の変換はjs.FunctionN < - >scala.FunctionNで利用できることがわかりました。しかし、コンパイラが明らかに私が変換が必要であることを知らないので、私が動的なファッション(型付けされたファサードなし)でライブラリを扱うと、彼らは私を助けません。 JSコードは、JSの文字列を入力としての機能を持つ配列期待している場合たとえば、 -Scala関数を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]が動作しないことを確認しました。それは基本的に真実ではないとする、「この機能はすでにjs.Functionである」と言っているので

答えて

4

asInstanceOfは動作しません。しかし、これは通常、あなたがそれを明示的な型の帰属を与える場合は、次のように(コンパイルしようとしていないが、おおよそ正しいはずです)を正しく変換しない:

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

それはもう少し定型のですが、それは常に行くのコストですファサードなしで...

+4

'js.Function2 [...]'詳細ではなく、 ':js.Function'とみなすことで、よりボイラを少なくすることができます。しかしそうでなければ、はい、それはあなたがしなければならないものです。 – sjrd

関連する問題