Scala光滑的散装插入阵列



我将一个长字符串分成一系列字符串,然后我想将所有这些字符串插入数据库。我可以轻松地循环遍历阵列并一个一个插入,但似乎非常效率。然后我认为有一个insertAll()方法。但是,insertAll()方法是这样定义的:

def insertAll(values: U*)

这仅接受多个u,但不接受 ArrayList

/* Insert a new Tag  */
def insert(insertTags: Array[String])(implicit s: Session) {
  var insertSeq: List[Tag] = List()
  for(tag <- insertTags) {
    insertSeq ++= new Tag(None, tag)
  }
  Tag.insertAll(insertSeq)
}

* Tag是表对象

这是我编写的初步代码。它不起作用,因为insertAll()不需要Seq。我希望有一种方法可以做到这一点...因此它不会产生数组长度时间SQL插入子句。

当函数期望重复参数(例如u*),并且要传递u的序列,则必须将其标记为序列参数,该序列参数用 : _*进行,如

Tag.insertAll(insertSeq: _*)

这在第6.6节的规范中进行了描述。它消除了某些情况,例如;

def f(x: Any*)
f(Seq(1, "a"))

在那里,可以用单个参数, Seq(1, "a")或两个, 1"a"调用f。它将是前者,后者是用f(seq(1," a"):_*)完成的。Python具有类似的语法。


关于您的评论中的问题:它与SEQ,连接到SEQ的集合以及可以隐式转换为SEQ(包括数组)的值。这意味着很多收藏,但并非全部。对于实例,不允许设置(但是它们具有Toseq方法,因此使用集合可以轻松调用)。

它不是一种方法,它更像是一种吸收。它只是告诉编译器,该参数本身就是完整的预期seq,而不是序列参数中唯一的项目。