2011-04-30 63 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)。

相关问题