此文件頁面特定於 Scala 2 中發布的功能,這些功能已在 Scala 3 中移除或由替代方案取代。除非另有說明,此頁面中的所有程式碼範例都假設您使用的是 Scala 2。
Scala REPL 是用於評估 Scala 中表達式的工具 (scala)。
scala 命令會透過將來源指令碼包裝在範本中,然後編譯並執行產生的程式來執行來源指令碼。
在互動模式中,REPL 會在提示符號處讀取表達式,將它們包裝在可執行範本中,然後編譯並執行結果。
先前結果會根據需要自動匯入至目前表達式的範圍中。
REPL 也提供一些命令功能,說明如下。
在 Ammonite 專案 中提供一種替代 REPL,它也提供更豐富的殼層環境。
功能
有用的 REPL 功能包括
- REPL 的 IMain 繫結至
$intp
。 - REPL 的最後一個例外繫結至
lastException
。 - 使用 Tab 鍵來完成。
- 使用
//print<tab>
來顯示已輸入的去糖化。 - 使用
:help
來取得命令清單。 - 使用
:load
來載入 REPL 輸入檔案。 - 使用
:paste
來輸入類別和物件作為伴侶。 - 使用
:paste -raw
來停用程式碼包裝,以定義套件。 - 使用
:javap
來檢查類別人工製品。 - 使用
-Yrepl-outdir
來使用外部工具檢查類別人工製品。 - 使用
:power
來進入 power 模式並匯入編譯器元件。 - 使用
:settings
來修改編譯器設定;有些設定需要:replay
。 - 使用
:replay
來使用已修改的設定重新執行階段。
實作注意事項
- 使用者程式碼可以包裝在物件中(讓程式碼在類別初始化期間執行)或類別中(讓程式碼在執行個體建構期間執行)。切換為
-Yrepl-class-based
。 - 每一行輸入都會個別編譯。
- 對前幾行的依賴關係會透過自動產生的匯入來包含。
- 可以透過輸入明確的匯入來控制
scala.Predef
的隱含匯入。
範例
scala> import Predef.{any2stringadd => _, _}
import Predef.{any2stringadd=>_, _}
scala> new Object + "a string"
<console>:13: error: value + is not a member of Object
new Object + "a string"
^
scala> import Predef._
import Predef._
scala> new Object + "a string"
res1: String = java.lang.Object@787a0fd6a string
Power 模式
:power
模式會從直譯器的編譯器匯入識別碼。
這類似於使用 import reflect.runtime._, universe._
從執行時期反射內容匯入。
Power 模式也會提供一些歡迎橫幅中所記錄的實用方法。
可以使用 :imports
或 -Xprint:parser
來見證其功能。
為 Scala REPL 做出貢獻
REPL 原始碼是 Scala 專案的一部分。問題會透過專案的標準機制追蹤,而提交要求則會接受於 GitHub 儲存庫。