2016-09-01 2 views
2

js.FunctionN < ->scala.FunctionN에 암시 적 변환을 사용할 수 있다는 것을 알고 있습니다. 그러나 컴파일러가 분명히 변환이 필요하다는 것을 알지 못하기 때문에 동적 형식 (형식화 된 외형이 아닌)으로 라이브러리를 사용하면 라이브러리가 도움이되지 않습니다. JS 코드가 JS의 문자열 및 입력 등의 기능을 가진 배열 예상 예를 들어, -Scala 함수를 JS 함수로 변환

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

같은 것을,이 같은 스칼라에서 그것을 만들 수 없습니다 :

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

스칼라 함수는 JS 함수로 변환되지 않기 때문에. 거기에 변하기 쉬운 Seq?에 대한 toJSArray과 유사한 몇 가지 명시적인 변환 방법이 있습니까? 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] 
) 

그것은 좀 더 상용구하지만 그것은 항상가는 비용 :하지만이 보통이 같은 (컴파일 시도하지 않은 있지만 대략 정확해야), 그것을 명시 적 타입 귀속을 주면 제대로 변환 않습니다 facades없이 ...

+4

'js.Function2 [...]'장황한 것보다는': js.Function'으로 생각하면 덜 보일러 용으로 만들 수 있습니다. 하지만 그렇지 않으면, 네, 그건 당신이해야 할 일입니다. – sjrd