我知道程序员应该将他们的代码包装在一个应用程序对象中:
object Hello extends App { println("Hello, World") }
如果我想获得任何输出,那么它在Eclipse中是必需的.但是,当我尝试在Emacs中编写一些代码(非常随便)时,我这样写:
class Pair[+T](val first: T, val second: T) trait Friend[-T] { def befriend(someone: T) } def makeFriendWith(s: Student, f: Friend[Student]) { f.befriend(s) }
似乎没有包含该函数的通用对象或类makeFriendWith
.Scala是否像JavaScript一样,一切都附加到全局对象?如果没有,这个功能附加什么?
另外为什么这可以在控制台中工作(我用scala
命令编译并且它有效)但是在Eclipse中不起作用?Application对象有什么用?
Scala没有顶级def,但您的脚本可以由REPL或scala脚本运行器运行.
脚本的精确行为取决于您运行它的方式.
REPL可以逐行或全程运行脚本.(比较:paste
和:paste -raw
对比:load
或-i init.script
未来选项-I init.script
.)
敏感脚本存在问题.脚本运行器应该意识到你是否正在尝试运行App
.
还有另一项工作要使脚本编写阶段易于定制.滚动查看Scripter.scala
有关其当前启发式的代码注释.
简而言之,您的defs必须包含在顶级实体中,但具体如何发生是依赖于上下文的.
最近有一项努力为REPL提供替代的烘焙包装方案.
这些都不是语言规范的强制要求,除了与sbt
构建文件有关的特殊规则由语言定义.