Scala case class Цепочка значений параметров - PullRequest
0 голосов
/ 07 июня 2018
case class Person(@BsonProperty("first_name") firstName:Option[String],@BsonProperty("second_name")  secondName:Option[String],@BsonProperty("person_age") var  age:Int)


val me = Some(Person(Some(Ambareesh),Some(B),23))

      Or

val me = None

      Or

val me = Some(Person(Some(Ambareesh),None,23))

     Or

val me = Some(Person(None,None,23))


someOperation(me.secondName / None) //How can I implement this behavior in single line.
someOperation(me.firstName / None)


def someOperation(name:Option[String]){
   //Do ...
 }

Мои сомнения относительно аргумента (экземпляра Person) для метода someOperation.Сам аргумент является значением параметра Option, а поля также являются параметрами.Если что-либо из этого None (аргумент или аргумент.fieldName), я хочу, чтобы None возвращало значение поля как Some (fieldValue).Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 07 июня 2018
someOperation(me.flatMap(_.secondName))

См. ScalaDoc .

. Вы можете использовать map для не- Option свойств: me.map(_.age) is Option[Int].

0 голосов
/ 07 июня 2018

Если ваш someOperation возвращает вариант, который вы также можете использовать for.

val result: Option[String] = for {
   person <- me
   firstName <- someOperation(person.firstName)
   secondName<- someOperation(person.secondName)
} yield <use firstName, secondName here>

Это даст вам любой результат, который вы хотите рассчитать или None.

0 голосов
/ 07 июня 2018

Как я понял, вам нужно извлечь поля пользователя и передать его в метод someOperation.Правильно?

Если это так, вы можете использовать сопоставление с образцом для этого:

someOperation(
  me match {
    case Some(person) => person.firstName
    case None => None
  } 
)
...