Scala树结构和通过隐式参数插入副作用

时间:2013-05-22 12:01:34

标签: scala implicit

我有一个Node s的简单树,每个树都有一个apply方法,它接受一个给定的State并返回一个新的State和下一个{{ 1}}在树上。

Node

正如您所看到的,我希望能够在最终应用该功能时传递特定类型的副作用。

对于单个节点,这可以正常工作。但是,当我想以递归方式下降树时,它似乎崩溃了。例如,没有副作用,以下代码有效:

trait Node[SE <: SideEffect] {
  def apply(state: State)(implicit sideEffect: SE): (State, Node[_])
}

但是,如果尝试类似的东西采取隐含的副作用,它不起作用:

def execute(state: State, node: Node): (State, Node) = node(state) match {
  case (result, end: End) => (result, end)
  case (result, continue) => execute(result, continue)
}

我想根本问题是每次调用def execute[SE <: SideEffect](state: State, node: Node[SE])(implicit sideEffect: SE): (State, Node[_]) = { node(state) match { case (result, end: End) => (result, end) case (result, continue) => execute(result, continue) } } <console>:20: error: inferred type arguments [_0] do not conform to method execute's type parameter bounds [SE <: SideEffect] case (result, continue) => execute(result, continue) ^ <console>:20: error: type mismatch; found : Node[_0] where type _0 required: Node[SE] case (result, continue) => execute(result, continue) ^ <console>:20: error: could not find implicit value for parameter sideEffect: SE case (result, continue) => execute(result, continue) ^ 都必须已经涵盖了execute所有后续调用的所有含义。

鉴于此,以后是否有任何方法可以轻松传递副作用?我希望能够在一个地方定义execute的树,然后在具有指定副作用的另一个地方走树。

0 个答案:

没有答案