我是Scala的新手,首先阅读Scala By Example本书,
该书中存在一个问题,我无法理解,例如第59页,作者写道:
abstract class Stack[+A] {
def push[B >: A](x: B): Stack[B] = new NonEmptyStack(x, this)
def isEmpty: Boolean
def top: A
def pop: Stack[A]
}
object EmptyStack extends Stack[Nothing] {
def isEmpty = true
def top = error("EmptyStack.top")
def pop = error("EmptyStack.pop")
}
class NonEmptyStack[+A](elem: A, rest: Stack[A]) extends Stack[A] {
def isEmpty = false
def top = elem
def pop = rest
}
如您所见,在定义之前调用 NonEmptyStack(x,this)类。 怎么可能?
当我尝试在编译器消息下面遇到的那些代码时:
< console>:11:错误:未找到:输入NonEmptyStack
def push [B>:A](x:B):Stack [B] = new NonEmptyStack(x,this)
答案 0 :(得分:3)
您需要使用:paste
然后复制代码以允许Scala REPL评估整个代码块。
答案 1 :(得分:0)
答案是Sarvesh Kumar Singh's comment:
嗯....问题是Scala实际上是一种编译语言,只要在项目或类路径中可用,编译器就会找到该类。 - Sarvesh Kumar Singh 8月5日10:51