У меня есть (Akka) актер код, используя тематический класс + конструктор копирования для обновления состояния:Scala pass function args через конструктор экземпляра класса case?
def foo(state:StateCaseClass) : Receive = {
import state._
{
case Bar(updates) =>
context become foo(copy(/* change a limited number of things */))
// ... other message processing w/ lots of context become foo(copy(...))
}
}
Я хотел бы добавить ниже импорта
def update = context become foo(copy(_))
так, что код может быть
def foo(state:StateCaseClass) : Receive = {
import state._
def update = context become foo(copy(_))
{
case Bar(updates) =>
update(/* change a limited number of things */)
// ... etc
}
}
но это не скомпилировано. Я могу, конечно, настроить def update
немного, чтобы избавиться от большинства шаблонного, но copy
до сих пор торчит вокруг:
def foo(state:StateCaseClass) : Receive = {
import state._
def update(newState:StateCaseClass) = context become foo(newState)
{
case Bar(updates) =>
update(copy(/* change a limited number of things */))
// ... etc
}
}
Есть ли сопоставимый синтаксис, который позволит мне пройти через арг конструктору случай класс копирования и высушить этот последний бит?
hrrrm, я думаю, что я согласен с отказом - Я ищу, чтобы сделать код базы более (не) разработчик понятной, а не другая вещь. Тем не менее, мне любопытно: как выглядит этот подход, если есть несколько полей одного типа? например, 'Behavior (intOne: Int, intTwo: Int, str: String)'? – Carl
@ Карл: Я не знал, что это было так запутанно. Исправлено, см. Обновление. – senia