学习scala.js并尝试将scala.js类导出为这样的javascript:
@JSExport("Pt")
class Pt[T]( points: Seq[T] ) {
@JSExport
def y = points(1)
}
当我在javascript控制台(Chrome)中尝试此操作时:
new Pt([1,2,3])
上面引发了一个错误:" $ c_sjsr_UndefinedBehaviorError ... 1,2,3不是scala.collection.immutable.Seq" 的实例。不知道如何在javascript中传递Seq作为参数。
使用参数创建类构造函数的技巧是什么,以便它可以作为javascript库和scala库使用?我必须使用js.Array吗? (如果可能的话,会更喜欢不可变的集合)
我试过@JSExportAll,但它也不起作用:
@JSExportAll
class Pt[T]( points: Seq[T] ) {
def y = points(1)
}
然后在javascript控制台(Chrome)中,我甚至找不到构造函数。它抛出" ReferenceError:Pt未定义"
答案 0 :(得分:3)
您有几个选择:
js.Array
@JSExport
class Pt[T](points: js.Array[T]) {
def y = points(1)
}
// Scala
val pt = new Pt(js.Array(1,2,3))
// JS
var pt = new Pt([1,2,3])
js.Array
class Pt[T](points: Seq[T]) {
@JSExport
def this(points: js.Array[T]) = this(points.toSeq)
def y = points(1)
}
// Scala
val pt = new Pt(Seq(1,2,3))
// JS
var pt = new Pt([1,2,3])
@JSExport
class Pt[T](points: T*) {
def y = points(1)
}
// Scala
val pt1 = new Pt(1,2,3)
val pt2 = new Pt(seq: _*)
// JS
var pt = new Pt(1,2,3)