Использование именованных параметров после частичной инициализации объекта - PullRequest
0 голосов
/ 06 сентября 2018

Я очень новичок в Scala, поэтому извиняюсь, если какая-то из следующих терминов неверна. У меня есть класс case с двумя списками параметров, скажем:

case class MyClass(a : Int, b : Int)(c: Int, d : Int, ... many others)

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

def buildPartial() : **something** = {
    MyClass(1, 2)
}

и я хотел бы иметь возможность использовать именованные аргументы при предоставлении оставшихся параметров после того, как buildPartial выполнит свою работу, т.е.

val fullyPopulated = buildPartial()(c = 3, d = 4, ...)  

Возможно ли это, и если да, то как я могу объявить buildPartial для достижения этого

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете использовать несколько списков параметров в функциях:

case class C(a: Int)(b: Int)(c: Int)


object O{

  def buildP()(b: Int, c: Int) = C(1)(b)(c)

  val c = buildP()(c = 2, b = 1)



}
0 голосов
/ 06 сентября 2018

Вы не можете создать частично инициализированный класс, поэтому вам нужно определить второй класс, содержащий частичные данные (я назвал его MyPartialClass). Добавление метода apply к этому классу позволяет легко создавать полные экземпляры MyClass

case class MyClass(a: Int, b: Int, c: Int, d: Int, e: Int)

case class MyPartialClass(a: Int, b: Int) {
  def apply(c: Int, d: Int, e: Int) = MyClass(a, b, c, d, e)
}

val partial = MyPartialClass(1, 2)
val full: MyClass = partial(d=4, c=3, e=5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...