假设我有以下内容:
case class Person(val name: String) {}
def personName(person: Option[Person]): Option[String] = {
// if person is a Some(Person) Some(person.get.name) else None
}
我的观点是,如何轻松(在一行中)返回该人姓名的选项,具体取决于该人是否为“某人”或“无”?
我可以通过模式匹配轻松完成此操作,就像这样
def personName(person: Option[Person]): Option[String] = {
person match {
case Some(p) => Some(p.name)
case None => None
}
}
我可以轻松地为此编写一个通用函数,就像这个
def optionalAttribute[T, AT](obj: Option[T], attribute: => AT): Option[AT] = {
obj match {
case Some(t) => Some(attribute)
case None => None
}
}
但是了解Scala,必须有一种更容易(一线)的方法来实现这一点。
我在俯瞰什么?
答案 0 :(得分:4)
def personName(person: Option[Person]): Option[String] = person.map(_.name)
答案 1 :(得分:0)
事实上,我忽视了一些简单的事情。科莱格指出了这一点。
for (p <- person) yield p.name