[英]What does `:load` do and what does it not do in Scala REPL?
我有以下代碼:
abstract class AExp {
def eval : Int = this match {
case Num(n) => n
case Add(e1, e2) => e1.eval + e2.eval
}
}
case class Num(n : Int) extends AExp
case class Add(e1 : AExp, e2 : AExp) extends AExp
case class Prd(e1 : AExp, e2 : AExp) extends AExp {
override def eval : Int = e1.eval * e2.eval
}
它工作正常的Scala 2.8下在這里 ,但2.10下不工作時,我將其加載到REPL。 我有很多錯誤:
scala> :l aexp.scala
Loading aexp.scala...
<console>:9: error: not found: value Num
case Num(n) => n
^
<console>:9: error: not found: value n
case Num(n) => n
^
<console>:10: error: not found: value Add
case Add(e1, e2) => e1.eval + e2.eval
^
<console>:10: error: not found: value e1
case Add(e1, e2) => e1.eval + e2.eval
^
<console>:7: error: not found: type AExp
case class Num(n : Int) extends AExp
^
<console>:7: error: not found: type AExp
case class Add(e1 : AExp, e2 : AExp) extends AExp
^
<console>:7: error: not found: type AExp
case class Add(e1 : AExp, e2 : AExp) extends AExp
^
<console>:7: error: not found: type AExp
case class Add(e1 : AExp, e2 : AExp) extends AExp
^
<console>:7: error: not found: type AExp
case class Prd(e1 : AExp, e2 : AExp) extends AExp {
^
<console>:7: error: not found: type AExp
case class Prd(e1 : AExp, e2 : AExp) extends AExp {
^
<console>:7: error: not found: type AExp
case class Prd(e1 : AExp, e2 : AExp) extends AExp {
^
但是相同的代碼在2.10 REPL下的:paste
模式下也可以正常工作。 這里發生了什么? :load
做什么,不做什么?
如:help
所說,
:加載
加載並解釋一個Scala文件
它加載文件並逐行 解釋它,就像它將解釋您提供給REPL的每一行一樣,而:paste將整個代碼塊視為一個原子單元。
您可以預測的錯誤是repl看到了
abstract class AExp {
def eval : Int = this match {
case Num(n) => n
case Add(e1, e2) => e1.eval + e2.eval
}
}
但是對Num和Add類型一無所知-它們尚未定義。 使:load以您想要的方式工作的技巧是將所有代碼包裝在某個超級對象中,例如:
object InterpretAsUnit {
// all your code goes there
}
PS有趣的事實是, scala -i <your path>
與scala
幾乎相同,然后:load <your path>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.