使用Context.actorOf时如何将回调函数传递给akka actor构造函数?

simbo1905

我想将回调传递给其构造函数中的akka​​ actor:

object FSMActorWithCallback {
  type Tracer = (Int, NodeState, NodeData, ActorRef, Any) => Unit
}

class FSMActorWithCallback(tracerCallback: FSMActorWithCallback.Tracer) extends FSMAwesomeActor
  // method is called each FSM Event so we can record current state and next message 
  override def trace(state: NodeState, data: NodeData, sender: ActorRef, msg: Any) : Unit = {
    // different tracing callback for different test rigs such as unit tests or integration tests
    tracerCallback(nodeUniqueId, state, data, sender, msg)
  }
}

这将允许我使用定义原始actor,new但我需要使用actorOffactory方法来使actor正确挂接到系统中:

class Supervisor extends Actor {

  def outputStateTrace(state: NodeState, data: NodeData, sender: ActorRef, msg: Any): Unit = { 
    /*actually make a binary log for analysis of complex failures*/
  }

  // COMPILE ERROR "follow this method with _ if you wan to treat it as a partially applied function" 
  var child = contact.actorOf(Props(classOf[FSMActorWithCallback], outputStateTracer) 

  // seems to work fine but not what i need
  val childRaw = new FSMActorWithCallback(tracer) 

}

actor的实际构造需要通过所示的factory方法进行,但我无法弄清楚如何通过factory方法传递回调。

理查德·鲍克(Richard Bowker)

您传递的是方法而不是函数。编译器告诉您使用Eta扩展将其转换为函数。

var child = contact.actorOf(Props(classOf[FSMActorWithCallback], outputStateTracer _)

由于在底部解释这个帖子

由于我们已经引入了神奇的下划线作为万事通,同时在函数定义中发现了一些快捷方式,因此,如果我们想更明确地启动eta扩展,他将再次加入。因此,迫使编译器将第二种方法强制转换为函数的第二种选择是显式地引用所谓的方法值,方法是简单地在方法名称后加一些下划线(而不是方法参数)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将回调函数传递给子组件?

如何将回调函数传递给父级

如何将回调函数传递给返回多行的aggregate()?

Akka Java:使用带有参数的构造函数创建一个actor

使用IoC容器时如何将参数传递给构造函数?

使用`<fx:include>`时如何将参数传递给控制器的构造函数?

使用std :: vector时如何将索引信息传递给元素构造函数?

如何将回调作为参数传递给另一个函数

如何将回调函数从C ++传递给Objective-C

如何将回调函数作为构造函数参数传递并分配给类属性

如何将“此”对象传递给使用协议的函数中调用的回调函数

使用react-router将回调函数作为道具传递给其他路由

将回调函数传递给指令

如何将回调函数从Java传递到Kotlin类

使用push_back()实例化对象时,如何将指针传递给对象的构造函数?

如何使用Python 3.x将回调及其参数从包装函数传递到装饰器?

在R中使用apply或map函数时如何将列名传递给函数?

使用react-redux,通过redux状态将回调函数传递给通用组件的最佳实践是什么?

谁将Context作为方法参数传递给构造函数

将回调函数传递给猫鼬聚合函数

如何将构造函数传递给构造函数?

将参数传递给make时如何使用Laravel的自动构造函数注入?

从javascript调用dart编译的Javascript时,如何将回调函数传递到dart编译的Javascript中?

我可以在构造函数中创建actor实例吗?

将“ about:blank”传递给ChromiumWebBrowser的构造函数时未创建V8Context

使用包含影片剪辑元件链接标识符的字符串时如何将参数传递给构造函数

在Tkinter中使用事件时,如何将其他变量传递给事件函数?

在Thymeleaf中使用onClick时如何将参数传递给javascript函数调用

使用lapply时如何将参数传递给用户定义的函数