Akka 코드에 나타나는진면목
최근 능동적인 구조에 열중하고 있기 때문에 오늘은 아카의 입문 기사를 쓰고 싶습니다.
대상 독자
이번 해설 코드.
다음 반응기를 정의했습니다.
import akka.actor.typed.{ActorRef, Behavior}
import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext, Behaviors}
object TestActor {
def apply(): Behavior[Command] =
Behaviors.setup(context => new TestActor(context))
sealed trait Command
final case class Greet(message: String, replyTo: ActorRef[Respond]) extends Command
final case class Respond(message: String)
}
class TestActor(context: ActorContext[TestActor.Command])
extends AbstractBehavior[TestActor.Command](context) {
import TestActor._
override def onMessage(msg: Command): Behavior[Command] =
msg match {
case Greet(message, replyTo) =>
replyTo ! Respond(message)
this
}
}
이쪽 반응기로 테스트를 쓸게요.import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit
import org.scalatest.wordspec.AnyWordSpecLike
class TestActorSpec
extends ScalaTestWithActorTestKit with AnyWordSpecLike {
import TestActor._
"Test Actor" must {
"メッセージを受信すると、そのまま返す" in {
val probe = createTestProbe[Respond]()
val testActor = spawn(TestActor())
testActor ! Greet("hogehoge", probe.ref)
val response = probe.receiveMessage()
response.message should be("hogehoge")
}
}
}
여러분은 상술한 테스트 코드를 읽을 때 바로 이해하셨습니까?내가 처음에 이해할 수 있는 건 "아~ 이러면 배우한테 문자를 보낸구나~"
testActor ! Greet("hogehoge", probe.ref)
이 글에서 우리는 이 줄이 도대체 무엇을 하고 어떤 구조로 행동하는지 설명할 것이다.! 진면목
후딱후딱라고 원형으로 설명하면 단순한'방법'에 불과하다.
하지만 방법은
testActor.!(Greet("hogehoge", probe.ref))
이렇게 부르는 거 아니에요?내 생각엔 그렇지?(내 생각엔)
!정의
IntelliJ를 사용하는 사람은 Cmd+b로 점프를 시도해 보세요.
다음 정의로 이동한 것 같습니다.
object ActorRef {
implicit final class ActorRefOps[-T](val ref: ActorRef[T]) extends AnyVal {
/**
* Send a message to the Actor referenced by this ActorRef using *at-most-once*
* messaging semantics.
*/
def !(msg: T): Unit = ref.tell(msg)
}
}
좋아!메소드로 정의!왜 특별한 호칭이 있을까요?
이는 Scara가 이렇게 쓸 수 있는 언어 규범이기 때문이다.
아마 Scara를 쓸 줄 아는 사람은 이미 알았겠지만, 나는 최근까지도 몰랐어!
scala에서 아래의 명칭은 모두 같은 동작이다
// いわゆる一般的な書き方
testActor.!(Greet("hogehoge", probe.ref))
// . を省略できる
testActor !(Greet("hogehoge", probe.ref))
// 引数の()を省略できる
testActor ! Greet("hogehoge", probe.ref)
총결산
이번에도 저와 마찬가지로 아카와 스칼라가 최근에 공부를 시작했어요!이런 분들에게 참고가 됐으면 좋겠다고 생각해서 기사를 썼어요.
또 현재 회사 밖 사람들과 함께 아카카 실천성경 윤독회를 열고 있습니다!
그런 계기로 악카 공부를 시작해볼까요?이런 생각을 가진 여러분, 윤독회에 꼭 참가하세요!
관심 있으면 이 글에 메모를 남기고 DM이 오기를 기다리세요!
Reference
이 문제에 관하여(Akka 코드에 나타나는진면목), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/wooootack/articles/851c416b47336e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)