我按照以下示例进行操作。
在包IO的scala文档中,有一个由O和C表示的源类和源对象。有人可以解释一下这个区别吗?
我想"导入scala.io.source"导入源类?但是fromfile方法是源对象的一部分吗?
例如,源类具有addString()方法,源对象具有fromFile()方法。你什么时候使用哪个?
由于
import scala.io.Source
object Test {
def main(args: Array[String]) {
println("Following is the content read:" )
Source.fromFile("test.txt" ).foreach{
print
}
}
}
答案 0 :(得分:1)
对象和类是或多或少独立的事物碰巧具有相同的名称(有一些小的东西,如隐式解决方案,其中“伴侣对象”是特殊的)。 Scala允许您拥有一个具有相同名称的类型和值,因为它总是可以从上下文中分辨出您的意思:
class Foo {
type Bar = Int
val Bar = "Hello"
}
val foo = new Foo
type baz = foo.Bar
val quxxl = foo.Bar
由于它们具有相同的名称,导入Source
恰好导入它们。
根据您的示例,您可以像使用任何其他object Source
一样使用object
。您像使用任何其他class Source
一样使用class
:
val s: Source = ...
s.addString(...)
(请注意,如果您想引用object Source
的类型,那就是Source.type
- 这与任何其他object
没有区别(例如Nil
的类型为Nil.type
;没有名为plain Nil
的类型。这只是有点混乱,因为 是一种名为Source
的类型 - class Source
)
答案 1 :(得分:0)
在scala中,类可以有companion object,它包含类的静态方法和字段。 scala中没有静态关键字。伴随对象不是Source类。