官术网_书友最值得收藏!

4.5 Scala應用程序

要運行一個Scala程序,必須提供一個獨立對象的名稱,而這個獨立對象需要包含一個main方法,該方法接收一個Array[String]作為參數,結果類型為Unit。任何帶有滿足正確簽名的main方法的獨立對象都能被用作應用程序的入口。[8]參考示例4.3。

示例4.3 Summer應用程序

示例4.3中單例對象的名稱是Summer。它的main方法帶有正確的簽名,因此可以將它當作應用程序來使用。文件中的第一條語句引入了示例4.2的ChecksumAccumulator對象中定義的calculate方法。這句引入語句讓你可以在這個文件后續的代碼中使用這個方法的簡稱。[9]main方法的方法體只是簡單地打印出每個參數,以及參數的校驗和,并以冒號分隔開。

注意

Scala在每一個Scala源碼文件中都隱式地引入了java.langscala包的成員,以及名稱為Predef的單例對象的所有成員。位于scala包的Predef包含了很多有用的方法。比如,當你在Scala源碼中使用println時,實際上調用了Predefprintln。(Predef.println轉而調用Console.println,執行具體的操作。)而當你寫下assert時,實際上調用了Predef.assert。

要運行Summer這個應用程序,可以把示例4.3中的代碼放入名稱為Summer.scala的文件中。因為Summer也用到了ChecksumAccumulator,將示例4.1中的類和示例4.2中的伴生對象放入名稱為ChecksumAccumulator. scala的文件中。

Scala和Java的區別之一是,Java要求將公共的類放入與類同名的文件中(例如,需要將SpeedRacer類放到SpeedRacer.java文件中),而Scala允許任意命名.scala文件,無論你將什么類或代碼放到這個文件中。不過,通常對于那些非腳本的場景,把類放入以類名命名的文件中是推薦的做法,就像Java那樣,以便程序員能夠更容易地根據類名定位到對應的文件。這也是我們在命名Summer.scalaChecksumAccumulator.scala時所采取的策略。

ChecksumAccumulator.scalaSummer.scala都不是腳本,因為它們都是以定義結尾的。而腳本則不同,必須以一個可以計算出結果的表達式結尾。因此,如果你嘗試以腳本的方式運行Summer.scala,則編譯器會報錯,提示你Summer.scala并不以一個結果表達式結尾(當然,這是假設你并沒有在Summer對象定義之后自己再添加任何額外的表達式)。你需要用Scala編譯器實際編譯這些文件,然后運行編譯出來的類。編譯的方式之一是,使用scalac這個基礎的Scala編譯器,就像這樣:

這將編譯你的源文件,并生成Java類文件,后續可以通過與先前示例中相同的scala命令來運行該文件。不過,與之前用包含了需要編譯器解釋的Scala代碼的以.scala擴展名結尾的文件名不同,[10]這里需要給出包含正確簽名的main方法的獨立對象名。因此,需要這樣運行Summer

你將看到這個程序打印出了傳入的兩個命令行參數對應的校驗和:

主站蜘蛛池模板: 依兰县| 北安市| 阿拉善左旗| 花莲市| 洛宁县| 云安县| 定州市| 静海县| 林甸县| 奈曼旗| 临洮县| 衡东县| 安阳县| 桐庐县| 鸡东县| 浏阳市| 商河县| 阳春市| 长岛县| 沿河| 金门县| 个旧市| 商城县| 武安市| 东辽县| 蕲春县| 石泉县| 田林县| 游戏| 兴城市| 同江市| 柘城县| 乐业县| 屏边| 玛沁县| 三原县| 哈密市| 莎车县| 香格里拉县| 临西县| 德阳市|