我是scala的初学者,在S99上尝试学习scala.其中一个问题涉及从字符串转换为树数据结构.我可以"手动"完成它,我也想看看如何使用Scala的解析器组合器库来实现它.
树的数据结构是
sealed abstract class Tree[+T]
case class Node[+T](value: T, left: Tree[T], right: Tree[T]) extends Tree[T] {
override def toString = "T(" + value.toString + " " + left.toString + " " + right.toString + ")"
}
case object End extends Tree[Nothing] {
override def toString = "."
}
object Node {
def apply[T](value: T): Node[T] = Node(value, End, End)
}
Run Code Online (Sandbox Code Playgroud)
输入应该是一个字符串,如下所示: a(b(d,e),c(,f(g,)))
我可以用类似的东西来解析字符串
trait Tree extends JavaTokenParsers{
def leaf: Parser[Any] = ident
def child: Parser[Any] = node …Run Code Online (Sandbox Code Playgroud) 我有这个基于Akka Concurrency预打印的问题(最终版本还没有),使用它时没有解释.
在课程的第1版中,他们有:
class Altimeter extends Actor with ActorLogging with EventSource{
...
}
Run Code Online (Sandbox Code Playgroud)
声称Altimeter现在与EventSource紧密结合,因此测试Altimeter还需要测试EventSource.修复建议的更改如下:
--- a/src/main/scala/Altimeter.scala
+++ b/src/main/scala/Altimeter.scala
@@ -9,9 +9,10 @@ import scala.concurrent.ExecutionContext.Implicits.global
object Altimeter{
case class RateChange(amount: Float) //sent to Altimeter
case class AltitudeUpdate(altitude: Double)
+ def apply() = new Altimeter with ProductionEventSource
}
-class Altimeter extends Actor with ActorLogging with EventSource{
+class Altimeter extends Actor with ActorLogging{ this: EventSource =>
import Altimeter._
val ceiling = 43000 //feet
diff --git a/src/main/scala/EventSource.scala b/src/main/scala/EventSource.scala
index 1fd5578..ded4f38 100755
--- a/src/main/scala/EventSource.scala
+++ …Run Code Online (Sandbox Code Playgroud)