簡體   English   中英

為什么沒有Java的Repl模式

[英]Why no Repl mode for Java

嗯,我知道這是一個愚蠢的問題,但讓我們思考一下。

為什么我們不能為Java提供repl模式或shell類型。 假設我只想做Math.max(2,3)來獲取輸出3.它可以類似於Scala repl模式,默認情況下處理類和主聲明(它擴展到App )並且只計算表達式。

技術上:

  1. 有一個后面運行的解釋器可以執行它 - 如果scala和groovy可以,那么這意味着JVM不是主要問題
  2. 如果javac是原因,比如我們刪除所有優化並且它直接逐行轉換為java字節代碼,那么應該有一條出路。 類型推斷可能不會很強,無法顯示大量信息,但至少可以顯示方法的輸出。 對於這種情況,可能會對javac進行一些修改
  3. 例如:在調試器中,我們將斷點附加到該行,然后執行前進。 可以應用類似的策略

為每個JVM進程提供一個默認shell會很酷,在運行時,可以訪問或設置一些靜態變量並擁有實時信息。

所有這些都會被考慮過,但為什么它沒有被多數人接受(雖然有一些開源實現)

這或多或少完全是BeanShell的作用。

Eclipse中的Display視圖在此區域中提供了許多方便的行為,包括命令完成,對正在運行的應用程序堆棧的訪問以及通過System.out的控制台輸出。

就像@Sean建議你確實可以在repl模式下使用bean shell。

java -cp ./bsh-2.0b4.jar bsh.Interpreter
BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
bsh % System.out.println("Hello World");
Hello World

或者,eclipse IDE上不太知名的Display選項卡可以執行任意java代碼並動態評估表達式。 Ctrl+U運行表達式, Ctrl+Shift+I計算它們。 它不是repl模式,而是接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM