Понимание Акка ФСМ `onTransition` - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь внедрить Akka FSM в Java и в процессе пытаюсь понять некоторые примеры, написанные на Scala.Я также посмотрел на документацию

Я не совсем понимаю цель _ в приведенном ниже случае.

onTransition {
    case Uninitialized -> _ => unstashAll()
}

Указывает ли это на"любое" состояние в переходе?

Ответы [ 2 ]

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

вещь -> - это объект-экстрактор, определенный в объект-компаньон FSM .Его можно определить следующим образом:

object -> {
   def unapply[A, B](x: (A, B)): Option[(A, B)] = Some(x)
}

, и он будет просто соответствовать парам объектов.Если один из подшаблонов является подчеркиванием, то он просто соответствует каждому возможному объекту.Например, с приведенным выше определением:

List((1, 2), (1, 3), (2, 3)).collect{ case x @ (1 -> _) => x }

возвращает

List[(Int, Int)] = List((1,2), (1,3))

(все переходы состояний из 1 во что угодно), тогда как

List((1, 2), (1, 3), (2, 3)).collect{ case x @ (_ -> 3) => x }

возвращает

List[(Int, Int)] = List((1,3), (2,3))

(все переходы состояний из чего-либо в 3).То же самое относится к штатам FSM.

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

В конце концов нашел ответ в документации .

В Java это можно записать как

onTransition {
    matchState(UNINITIALIZED, null, () -> unstashAll())
}
...