2011-04-30 60 views
5

是否可以在沒有在對象中指定主函數的情況下使用Scala的import,以及在源文件中沒有使用package關鍵字與您希望導入的代碼?在Scala中執行類似Python的「導入」操作

一些解釋:在Python,我可以定義一些文件「Lib.py」的一些功能,寫

from Lib import * 
在同一目錄中的其他一些文件「Run.py」

,從使用功能在Run中運行Lib,然後使用命令python Run.py運行Run。這個工作流程對於我可能在一小時內編寫的小腳本來說是理想的。

在Scala中,看起來如果我想包含來自其他文件的函數,我需要開始將東西包裝在多餘的對象中。我寧願不要這樣做。

+0

'#include'和'import'只是有點不一樣。 – 2011-04-30 05:50:52

+0

在文件中使用'package'語句有什麼問題? – 2011-04-30 12:15:53

+0

@ Erick Fleming,這不僅僅是一個實用的問題,而是一個風格問題。在我的簡單腳本中,我不需要命名空間或OOP,所以我寧願不要將它們強加給我。最終,我的腳本中可能會出現兩行額外的代碼,但這些額外的行仍然困擾着我。我現在不再抱怨了,並且非常感謝Scala,因爲它的表現很好;) – emchristiansen 2011-05-02 04:37:22

回答

1

在Scala中編寫Python不太可能產生令人滿意的結果。對象不是「多餘的」 - 它是你的程序不是以面向對象的方式編寫的。

首先,方法必須在對象內。您可以將它們放置在package object之內,然後它們將對同名的包內的其他任何內容可見。其次,如果僅考慮對象和類,那麼所有無包的對象和其類文件存在於類路徑中,或者其scala文件被編譯在一起的類將相互可見。

+0

感謝您的回覆,我將其視爲「不」。我正在談論編寫一個簡單的腳本,而不是一個可以從命名空間和無處不在的OOP中受益的更復雜的程序。 – emchristiansen 2011-05-02 04:32:22

0

當您只編寫簡單的腳本時,請使用Scala的REPL。在那裏,你可以定義函數並調用它們,而不需要任何封閉的對象或包,也沒有主要的方法。

1

這是最小的,因爲我可以得到它:

0

對象/類不必在包裝,雖然它的強烈建議。也就是說,您還可以將單例對象(如包)(即獨立函數的名稱空間)視爲獨立函數,並將它們的內容導入爲包。

如果將應用程序定義爲擴展應用程序的對象,則不必定義主要方法。只需在對象的主體中編寫代碼,App特徵(它擴展了特定的DelayedInit特徵)將提供一個執行代碼的主要方法。

如果只是想編寫一個腳本,可以完全放棄該對象,只需編寫沒有任何容器的代碼,然後以非交互模式將源文件傳遞給解釋器(REPL)。

相關問題