gpt4 book ai didi

scala - 没有参数的scala方法中的模式匹配

转载 作者:行者123 更新时间:2023-12-05 09:19:27 25 4
gpt4 key购买 nike

我最近研究了 scala 多线程教程,偶然发现了一个在 Actor 中实现的方法:

class MyActor extends Actor
def receive = {
case "test" => println("received test")
case _ => println("received unknown message")
}
}

虽然我认为我知道该方法的作用,但我不知道如何使用这种方法(因为它不接受任何参数)。

虽然这个例子是关于 Akka 的,但我认为这与 Akka 无关

最佳答案

实际上 receive 返回部分函数。当您检查 Actor 的源代码时,您会看到;

type Receive = PartialFunction[Any, Unit]

因此,这意味着通过重写接收,您提供了一个部分函数,​​它接受任何参数和返回单元。稍后,如果您的 actor 收到消息,Akka 本身将使用此部分函数对传入消息进行模式匹配。

-- 编辑--

对于更具体的示例,假设您创建了一个类似的对象;

object Obj {
def receive: PartialFunction[Any, Unit] = {
case "test" => println("test case")
case 1 => println("int 1 case")
case d: Double => println("double case $d")
case _ => println("rest")
}
}

然后你可以像调用常规方法一样调用这个偏函数;

scala> Obj.receive(1)
int 1 case
scala> Obj.receive("test")
test case

Actor case 是特定的,只是你不直接调用接收,你提供它,如果消息到达,Akka 自己调用它;

protected[akka] def aroundReceive(receive: Actor.Receive, msg: Any): Unit = receive.applyOrElse(msg, unhandled)

当然这个调用取决于很多参数,比如你使用的拓扑结构,邮箱等等。

关于scala - 没有参数的scala方法中的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com