2011-10-30 72 views
7

我正在玩Scala。我需要的仅仅是函数定义的早午餐,但在Eclipse中,我只能创建.scala文件,其中函数def必须位于对象或类中。在Eclipse中创建Scala脚本文件

但我看到一个在线的Scala脚本,here,它不使用对象来包装所有的功能。

我当然可以用一个对象来包装我所有的功能,但我只是想知道它是否是必需的。谢谢!

+3

您可以编辑脚本而不包装在IntelliJ中的对象中 –

回答

2

但我看到Scala的剧本在网上,在这里,不使用对象来包装的所有功能。

注意,在这种情况下,该函数不能从其他文件称为(它们被包装在一个object与编译器生成的名称在运行时)。如果你“只需要一堆函数定义”,这可能不是你想要的:) AFAIK,Scala IDE目前不支持脚本文件,但你可以登录功能请求here

1

据我所知,不可能完全在范围之外编写函数或变量。也就是说它可能将它们写在类/对象定义之外。你只需要将它们包装在package object中。发生的事情基本上是,不是将函数/变量绑定到给定的类或对象,而是将其绑定到包。例如:

package test 
package object inside { 
    def hello = println("Hello from outer space!") 
    class Foo { 
    hello // call the function from the package 
    } 
} 

现在,当您构建Foo时,您应该打印出“来自外太空的Hello!”。

不知道我在说什么,我可以想象上面提到的脚本版本是可行的,因为脚本是在某种环境中运行的。所以想象一下,一些类加载脚本,然后将其包装到一个对象中并运行它。这意味着一种类似于上述情况的情况:功能仍然“属于”某个地方。

+0

Scala支持脚本样式,无需任何类,对象或包对象。 –

2

是的,在Eclipse中你需要将所有东西都包装在一个对象或类中。

只要将代码包装在对象中并避免使用Shebang,就可以在Eclipse中编辑Scala脚本。只需运行脚本scala -i scriptName.scala -e "Main.main(args)"(假设您在path上有scala发行版的“bin”文件夹)。

foo.scala:

object Main extends App { 
    println ("foo") 
} 

运行它

scala -i foo.scala -e "Main.main(args)"