3

为什么不同的行给出不同的返回值?

val tagIds = postData._1 map (TagTable.newTag(_))
// tagIds is defined as val tagIds: Array[Long]

val tagIds = for(tag <- postData._1) yield TagTable.newTag(_)
// tagIds is defined as val tagIds: Array[models.UnsavedTag => Long]
4

2 回答 2

4

由于一个简单的打字错误:

val tagIds = for(tag <- postData._1) yield TagTable.newTag(tag)
                                                           ^^^
于 2012-05-11T21:00:46.257 回答
3
val tagIds = postData._1 map (TagTable.newTag(_))

此行表示获取tag集合中包含的每个项目postData._1并调用TagTable.newTag(tag)。然后,tagIds是一个包含所有这些调用结果的集合。

val tagIds = for(tag <- postData._1) yield TagTable.newTag(_)

这一行表示对于tag集合中包含的每个项目postData._1,返回函数TagTable.newTag(_)(相当于函数x => TagTable.newTag(x))。然后,tagIds是一个包含所有这些功能的集合。

基本上,您实际上并没有在第二个版本中调用该函数。将其更改为:

val tagIds = for(tag <- postData._1) yield TagTable.newTag(tag)
于 2012-05-11T21:00:01.967 回答