第二个函数执行或编译的原因是什么:
case class Person(name: String)
def f1(op: Option[Person]) = op.map(p => Seq(p.name)) // GOOD
def f2(op: Option[Person]) = op.map(Seq(_.name)) // WRONG
P.S。我看到评论指向stackoverflow.com/a/7673633/6059889作为问题的答案,但我不明白这是如何回答的。根据规则2,我希望Seq(_.name)
成为x => Seq(x.name)
,这应该有效。
P.P.S。感谢Dima,链接到:Underscore in Named Arguments:链接到_总是选择它可以的最严格的非退化范围,我明白了。