我将一个长字符串分成一系列字符串,然后我想将所有这些字符串插入数据库。我可以轻松地循环遍历阵列并一个一个插入,但似乎非常效率。然后我认为有一个insertAll()
方法。但是,insertAll()
方法是这样定义的:
def insertAll(values: U*)
这仅接受多个u,但不接受 Array
或 List
。
/* 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,而不是序列参数中唯一的项目。