Scala 中的 main() 方法

Mohammad Irfan 2023年1月30日 2022年5月18日
  1. Scala 中的 main() 方法
  2. Scala 中的@main 註解
  3. 將 Scala 程式碼反編譯成 Java
Scala 中的 main() 方法

本教程將討論 main() 方法及其在 Scala 中的用途。main() 方法是 Scala 的程式碼執行入口點。

它類似於 C、C++ 和 Java 的 main。顧名思義,此方法是執行任何 Scala 程式碼的主要入口點。

語法:

def main(args: Array[String]): Unit = {
         // main method body
}

這裡,def 是用於定義函式的關鍵字,main 是函式名,(args: Array[String]) 是關於告訴編譯器它是什麼型別的引數的方法引數通話過程中可以接聽。args 是一個字串陣列。

Unit = 是一個關鍵字,用於定義不返回任何內容的函式。它類似於 C 和 Java 語言中的 void 關鍵字。

Scala 中的 main() 方法

這是 Scala 的 main() 方法的最簡單示例。在下面的示例中,我們只是放置了一個列印語句來在控制檯上列印一條訊息。

程式碼:

object MyClass {
    def main(args: Array[String]) : Unit = {
        print("hello from the main method")
    }
}

輸出:

hello from the main method

如果你修改它的返回型別或簽名,你會得到如下輸出中所述的編譯時錯誤。所以永遠不要修改主方法簽名並按原樣使用它。

程式碼:

object MyClass {
    def main(args: Array[String]) : Int = {
        print("hello from the main method")
        return 12
    }
}

輸出:

hello from the main method
app.scala:3: warning: not a valid main method for Main,
  because main methods must have the exact signature `(Array[String]): Unit`, Scala runners will forgive a non-Unit result.
  To define an entry point, please define the main method as:
    def main(args: Array[String]): Unit

    def main(args: Array[String]) : Int = {
        ^

Scala 中的@main 註解

如果你使用的是 Scala 3,那麼你可以使用 @main 註釋來建立主方法或將任何方法標記為主方法。Scala 提供了一個新註解,可以使你的函式成為執行的入口點,你將獲得與上述示例相同的結果。

程式碼:

object MyClass {
    @main
    def helloWorld() = println("hello from the main method")
}

輸出:

hello from the main method

將 Scala 程式碼反編譯成 Java

如果你想檢視 Scala 的內部程式碼,可以通過反編譯 Scala 類來實現。我們做了同樣的事情,在 Java 中得到了同樣的程式碼。

我們現在可以將此程式碼執行到任何 JVM 機器上。

程式碼:

Compiled from "MyClass.scala"
public final class MyClass {
  public static void main(java.lang.String[]);
}