Scala :как инициализировать объект, используя значения по умолчанию

Думаю, это будет лучше пояснено на примере

У меня есть следующий case class

case class Person(name: String = "no name", surname: String = "no surname")

И Я хочу создать общую функцию для ее заполнения, например, из сообщения json, в котором могут быть указаны не все поля

. Я знаю, что для использования значений по умолчанию простой ответ — не передавать их конструктору, а если У меня есть несколько полей, которые могут отображаться или не отображаться в json, мне придется использовать огромное предложение переключения, охватывающее все возможные комбинации отсутствующих параметров. В этом случае, после прочтения json, я должен позаботиться о присутствии имени и фамилии, ни имени, ни фамилии, ни имени, ни фамилии... (Ну и дела, надеюсь, я ясно выразился ).

Чтобы быть более точным, я пытаюсь разработать функцию, которая позволяет мне создать человека из следующих значений json, используя значения по умолчанию, когда отсутствует какой-либо параметр

{ "name": "john", "surname": "doe" }
{ "surname": "doe" }
{ "name": "john" }
{ }

Вот почему я ищу более общий способ справиться с этим.

(Я покажу некоторый псевдокод, чтобы дать представление о том, чего я пытаюсь достичь)

Я думал о чем-то вроде:

val p = Person(name= "new person name", surname= Unit)

И в этом случае фамилия должна получить значение по умолчанию

Или что-то вроде

val p = Person( Map( "name" -> "new person name" ) _* )

Чтобы он также принимал значение по умолчанию для фамилии

Или, возможно, делая это в конструкторе, если я обнаружу нулевое значение (или None ), я мог бы назначить значение по умолчанию.

На самом деле я пытаюсь избежать повторения определения значений по умолчанию.

В любом случае, какой самый идиоматический способ добиться этого?

14
задан Saurabh 26 March 2019 в 10:41
поделиться