그렇다면 어떻게 될까요?JavaScript에서 사용하기 위해 ScalaJS에서 유형 안전 라이브러리를 만들 수 있습니까?
@JSExport("Test") object TestScalaJs {
@JSExport def callMe[A: ClassTag](f: js.Function1[Int, A]): Array[A] = Array(f(4))
}
에 :
var res = Test().callMe(function(x) {return x + 'x';});
console.log('TestScalaJs:', res.join(', '));
로 :
$c_jl_Throwable.fillInStackTrace__jl_Throwable @ VM153:4161
$c_sjsr_UndefinedBehaviorError.fillInStackTrace__jl_Throwable @ VM153:9241
$c_jl_Throwable.init___T__jl_Throwable @ VM153:4177
$c_sjsr_UndefinedBehaviorError.init___T__jl_Throwable @ VM153:9248
$c_sjsr_UndefinedBehaviorError.init___jl_Throwable @ VM153:9244
$throwClassCastException @ VM153:196
$as_s_reflect_ClassTag @ VM153:7824
$c_LTestScalaJs$.callMe @ VM153:2061
(anonymous function) @ VM155:2
$s_Lscalatags_jsdom_Frag$class__applyTo__Lscalatags_jsdom_Frag__Lorg_scalajs_dom_raw_Element__V @ VM153:1108
$c_Lscalatags_JsDom$TypedTag.applyTo__O__V @ VM153:9981
$c_Lfiddle_Fiddle$.println__sc_Seq__V @ VM153:2113
$c_LScalaFiddle$.init___ @ VM153:2021
$m_LScalaFiddle$ @ VM153:2034
(anonymous function) @ VM154:1
(anonymous function) @ VM77 resultframe?theme=light:32
그리고 응답이는 것을 내가 암시 인수를 잃었했기 때문에 내 마지막 질문에 나는 왜이 인간이 충돌되는 질문 callMe
입니다. 나는 때문에, 잘, 스칼라 자동 마술을 제공하기 전에 생각하지 않았다, 그래서 이것은 단지 첫 번째 시도에서 일했다 :
object TestVanilla {
def callMe[A: ClassTag](f: Int => A): Array[A] = Array(f(4))
}
val res = TestVanilla.callMe(_ + "x");
println(res.mkString(", "));
질문은 :
하나에 가정되는 방법 (적어도 컴파일 타임에는 동적 검사 필요 없음) 스칼라의 일반적인 기능 (예 : 정수, 배열, 함수, 제네릭 및 ClassTag
)을 ScalaJS에서 사용하고 JavaScript에서 쉽게 사용할 수있는 라이브러리는 무엇입니까? 나는 그것이 가능할 것을 정말로 희망한다.
* : 자바 스크립트에서 수동으로 작성한 ClassTag
과 같은 기본적인 요구 사항이 없음을 의미합니다.
저는 ScalaJS에 익숙하지 않아서 자동으로 호환되는 부분과 약간 다르게 처리해야하는 부분을 정말로 모릅니다. 고맙습니다. 솔루션이 잘 작동합니다. – monnef
직접 호환되는 제품과 호환되지 않는 제품은 https://www.scala-js.org/doc/interoperability/types.html에 문서화되어 있습니다. – sjrd