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插件也支持它。这回答了问题吗?我想不是,但可能只是我。我添加了一个指向包对象文档的链接。我认为它们是语言的一个很小的特点,很少使用它们。这回答了问题吗?我想不是,但可能只是我。我添加了一个指向包对象文档的链接。我认为它们是语言的一个很小的特点,很少使用。