在Scala中执行Python的“导入”之类的操作

时间:2011-04-30 05:47:00

标签: scala import include

是否可以在不指定对象中的main函数的情况下使用Scala的import,并且不使用源文件中的package关键字和要导入的代码?

一些解释:在Python中,我可以在一些文件“Lib.py”中定义一些函数,写一下

from Lib import *

在同一目录中的某个其他文件“Run.py”中,使用“运行中的Lib”中的函数,然后使用命令python Run.py运行“运行”。此工作流程非常适合我可能在一小时内编写的小脚本。

在Scala中,似乎如果我想要包含来自另一个文件的函数,我需要开始在多余的对象中包装东西。我宁愿不这样做。

4 个答案:

答案 0 :(得分:1)

在Scala中编写Python不太可能产生令人满意的结果。对象不是“多余的” - 这是你的程序不是以面向对象的方式编写的。

首先,方法必须在对象内部。您可以将它们放在package object内,然后它们将显示在同名包内的任何其他内容。

其次,如果只考虑对象和类,那么类路径中存在类文件或其scala文件一起编译的所有无包装对象和类将彼此可见。

答案 1 :(得分:1)

这是我能得到的最小值:

[$]> cat foo.scala
object Foo {
   def foo(): Boolean = {
      return true
   }
}

// vim: set ts=4 sw=4 et:
[$]> cat bar.scala
object Bar extends App {
    import Foo._

    println(foo)
}

// vim: set ts=4 sw=4 et:
[$]> fsc foo.scala bar.scala
[$]> export CLASSPATH=.:$CLASSPATH # Or else it can't find Bar.
[$]> scala Bar
true

答案 2 :(得分:0)

当您编写简单脚本时,请使用Scala的REPL。在那里,你可以定义函数并调用它们,而不需要任何封闭的对象或包,也没有主方法。

答案 3 :(得分:0)

对象/类不必在包中,但强烈建议使用。也就是说,您还可以将单个对象(如包)视为独立函数的名称空间,并将其内容作为包进行导入。

如果将应用程序定义为扩展App的对象,则不必定义main方法。只需在对象的主体中编写代码,App trait(扩展特殊的DelayedInit特性)将提供执行代码的主要方法。

如果只想编写脚本,可以完全放弃对象,只需编写没有任何容器的代码,然后以非交互模式将源文件传递给解释器(REPL)。