是否可以在不指定对象中的main函数的情况下使用Scala的import
,并且不使用源文件中的package
关键字和要导入的代码?
一些解释:在Python中,我可以在一些文件“Lib.py”中定义一些函数,写一下
from Lib import *
在同一目录中的某个其他文件“Run.py”中,使用“运行中的Lib”中的函数,然后使用命令python Run.py
运行“运行”。此工作流程非常适合我可能在一小时内编写的小脚本。
在Scala中,似乎如果我想要包含来自另一个文件的函数,我需要开始在多余的对象中包装东西。我宁愿不这样做。
答案 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)。