Scala是否有全局对象或类?

Scala是否有全局对象或类?,scala,Scala,我知道程序员应该将代码包装在应用程序对象中: 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

我知道程序员应该将代码包装在应用程序对象中:

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的
scala
命令,它工作了),但在Eclipse中不工作?应用程序对象的用途是什么?

您只能在控制台中定义这样的方法,控制台(幕后)会自动将它们包装到匿名类中


在控制台之外,没有这样的奢侈品

您只能在控制台中定义这样的方法,控制台(幕后)会自动将它们包装到匿名类中


在控制台之外,没有这样的奢侈品

作为一种JVM语言,Scala不能真正创建除类和接口之外的任何顶级实体

然而,它确实有一个“包对象”的概念,它创造了价值实体(
val
var
def
)的幻觉,而不是封闭在一个类或特征中


有关包对象的信息,请参阅。

作为一种JVM语言,Scala不能真正创建除类和接口之外的任何顶级实体

然而,它确实有一个“包对象”的概念,它创造了价值实体(
val
var
def
)的幻觉,而不是封闭在一个类或特征中


有关包对象的信息,请参阅。

Scala没有顶级DEF,但您的脚本可以由REPL或Scala脚本运行程序运行

脚本的精确行为取决于运行它的方式

REPL可以一行一行地运行脚本,也可以整行运行脚本。(比较
:粘贴
:粘贴-raw
:加载
-i init.script
和未来选项
-i init.script

有一个问题。脚本运行程序应该知道您是否正在尝试运行
应用程序

有必要使脚本编写成为一个易于定制的编译器阶段。滚动到
Scripter.scala
,查看有关其当前启发式的代码注释

简言之,您的def必须封装在顶级实体中,但具体实现方式取决于上下文

要为REPL提供另一种烘烤包装方案


所有这些都不是语言规范强制要求的,除了与
sbt
生成文件相关的特殊规则之外,任何其他规则都是由语言定义的。

Scala没有顶级def,但是您的脚本可以由REPL或Scala脚本运行程序运行

脚本的精确行为取决于运行它的方式

REPL可以一行一行地运行脚本,也可以整行运行脚本。(比较
:粘贴
:粘贴-raw
:加载
-i init.script
和未来选项
-i init.script

有一个问题。脚本运行程序应该知道您是否正在尝试运行
应用程序

有必要使脚本编写成为一个易于定制的编译器阶段。滚动到
Scripter.scala
,查看有关其当前启发式的代码注释

简言之,您的def必须封装在顶级实体中,但具体实现方式取决于上下文

要为REPL提供另一种烘烤包装方案


所有这些都不是语言规范强制要求的,任何与
sbt
构建文件相关的特殊规则都是由语言定义的。

您可以在Eclipse:use中直接运行这样的代码。IntelliJ IDEA Scala插件也支持它。

您可以在Eclipse中直接运行这样的代码:use。IntelliJ IDEA Scala插件也支持它。

这回答了问题吗?我想不是,但可能只是我。我添加了一个指向包对象文档的链接。我认为它们是语言的一个很小的特点,很少使用它们。这回答了问题吗?我想不是,但可能只是我。我添加了一个指向包对象文档的链接。我认为它们是语言的一个很小的特点,很少使用。