Scala.js:将带参数的 class 构造函数导出到 javascript
Scala.js: export class constructor with parameters to javascript
学习 scala.js 并尝试将 scala.js class 导出到 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 作为参数
创建带参数的 class 构造函数的技巧是什么,以便它既可以用作 javascript 库又可以用作 Scala 库?我必须使用 js.Array 吗? (如果可能的话更喜欢不可变的集合)
我尝试了@JSExportAll,但它也不起作用:
@JSExportAll
class Pt[T]( points: Seq[T] ) {
def y = points(1)
}
然后在javascript控制台(Chrome),我什至找不到构造函数。它抛出 "ReferenceError: Pt is not defined"
您有两个选择:
到处使用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)
学习 scala.js 并尝试将 scala.js class 导出到 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 作为参数创建带参数的 class 构造函数的技巧是什么,以便它既可以用作 javascript 库又可以用作 Scala 库?我必须使用 js.Array 吗? (如果可能的话更喜欢不可变的集合)
我尝试了@JSExportAll,但它也不起作用:
@JSExportAll
class Pt[T]( points: Seq[T] ) {
def y = points(1)
}
然后在javascript控制台(Chrome),我什至找不到构造函数。它抛出 "ReferenceError: Pt is not defined"
您有两个选择:
到处使用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)