我在玩Scala。我需要的只是功能定义的早午餐,但在Eclipse中我只能创建.scala
文件,其中函数def
必须位于对象或类中。
但我在网上看到一个Scala脚本here,它不使用对象来包装所有函数。
我当然可以使用一个对象来包装我的所有函数,但我只是想知道它是否是必需的。谢谢!
答案 0 :(得分: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)"
答案 1 :(得分:2)
但我在网上看到一个Scala脚本,这里没有使用对象来包装所有函数。
请注意,在这种情况下,无法从其他文件调用这些函数(它们在运行时用编译器生成的名称包装在object
中)。如果你“需要一个功能定义的早午餐”,这可能不是你想要的:) AFAIK,Scala IDE目前不支持脚本文件,但你可以记录功能请求here。
答案 2 :(得分: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 from outer space!”。
如果不完全知道我在说什么,我可以想象你上面提到的脚本版本可以工作,因为脚本是在某种环境中运行的。所以想象一下加载脚本的一些类,然后将它包装到一个对象中并运行它。这意味着有点像上面那样的情况:功能仍然“属于”某个地方。