如何从 nashorn 中创建 Scala Seq[String]()?
How to create a Scala Seq[String]() from within nashorn?
我需要创建一个 Seq() 对象,以便从 nashorn 中将其提供给另一个 Scala 对象。 class 通过
导入到 nashorn
var seqClass = Java.type("scala.collection.Seq");
对象创建如下所示:
var seq = new seqClass();
但是在为它创建对象时,我得到一个 TypeError:
TypeError: Can not create new object with constructor scala.collection.Seq with the passed arguments; they do not match any of its method signatures. in <eval> at line number 13
我怀疑 Seq() 的通用 class 丢失了,但我不知道如何将它添加到上面的代码中。
我没有使用 Nashorn 的经验,但是 Scala Seq
s 和其他集合是通过调用伴随方法而不是构造函数来创建的。根据我的理解,应该是这样的
val seqCompanion = Java.type("scala.collection.immutable.Seq$").MODULE$
seqCompanion.empty()
编辑:我希望 seqCompanion.apply(str1, str2, ...)
适用于非空序列,但在检查之后,Seq$.apply
的 JVM 签名是 public scala.collection.GenTraversable scala.collection.generic.GenericCompanion.apply(scala.collection.Seq)
所以它不会。您可以通过编写一个接受 Array[A]
并直接生成 Seq[A]
并像上面那样调用它的 Scala 方法来做到这一点:
// scala
object SeqToArray { def a2s[A](a: Array[A]) = a.toSeq }
// Nashorn
Java.type("SeqToArray$").MODULE$.a2s([str1, ...])
我需要创建一个 Seq() 对象,以便从 nashorn 中将其提供给另一个 Scala 对象。 class 通过
导入到 nashornvar seqClass = Java.type("scala.collection.Seq");
对象创建如下所示:
var seq = new seqClass();
但是在为它创建对象时,我得到一个 TypeError:
TypeError: Can not create new object with constructor scala.collection.Seq with the passed arguments; they do not match any of its method signatures. in <eval> at line number 13
我怀疑 Seq() 的通用 class 丢失了,但我不知道如何将它添加到上面的代码中。
我没有使用 Nashorn 的经验,但是 Scala Seq
s 和其他集合是通过调用伴随方法而不是构造函数来创建的。根据我的理解,应该是这样的
val seqCompanion = Java.type("scala.collection.immutable.Seq$").MODULE$
seqCompanion.empty()
编辑:我希望 seqCompanion.apply(str1, str2, ...)
适用于非空序列,但在检查之后,Seq$.apply
的 JVM 签名是 public scala.collection.GenTraversable scala.collection.generic.GenericCompanion.apply(scala.collection.Seq)
所以它不会。您可以通过编写一个接受 Array[A]
并直接生成 Seq[A]
并像上面那样调用它的 Scala 方法来做到这一点:
// scala
object SeqToArray { def a2s[A](a: Array[A]) = a.toSeq }
// Nashorn
Java.type("SeqToArray$").MODULE$.a2s([str1, ...])