REPL

概觀

語言
此文件頁面特定於 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 儲存庫

此頁面的貢獻者