我有一个非常简单的问题 - 在Scala中创建对象时应该何时应用new关键字?是在我们尝试仅实例化Java对象时?
可能重复:
在Scala中拥有伴随对象的理由是什么?
感谢您对我之前帖子的所有回复(Scala:伴侣对象和"new"关键字).我想问一下Scala中伴随对象的一般用途是什么?首先,我们是否可以在类本身的构造函数/方法定义的形式中包含所有方法,例如apply?此外,伴随布尔对象有什么意义,因为它甚至没有定义apply方法?
再次感谢您的所有回复.
我必须在这里遗漏一些愚蠢的东西.我有这个:
case class Color(val rgb:Int) {
   private val c = rgb - 0xff000000
   val r = (c & 0xff0000) >> 16
   val g = (c & 0x00ff00) >> 8
   val b = (c & 0x0000ff)
}
case object Red extends Color(0xffff0000)
case object Green extends Color(0xff00ff00)
case object Blue extends Color(0xff0000ff)
然后我希望这打印真实:
val c = Color(0xff00ff00)
println(c == Green)
为什么不呢?
我理解使用对象的一个主要好处是,它们是真实对象而不是系统范围的功能.但最后这些对象也可以在系统范围内访问.
除了更"纯粹" scala"对象"提供的额外好处之外.
我打赌有一个数字,但我无法弄明白哪个.
在一个伴侣对象中,我希望有一个字段记录从伴侣类中实例化的所有实例(它是抽象的),我可以这样做吗?
特别是,我认为this会引用子类的任何实例,但是当我在伴随对象中使用它时它将不会编译.
我正在从他们的文档中读到这个例子:
class Email(val username: String, val domainName: String)
object Email {
  def fromString(emailString: String): Option[Email] = {
    emailString.split('@') match {
      case Array(a, b) => Some(new Email(a, b))
      case _ => None
    }
  }
}
println(Email.fromString("scala.center@epfl.ch"))
val scalaCenterEmail = Email.fromString("scala.center@epfl.ch")
scalaCenterEmail match {
  case Some(email) => println(
    s"""Registered an email
       |Username: ${email.username}
       |Domain name: ${email.domainName}
     """)
  case None => println("Error: could not parse email")
}
我的问题:
什么是Some和Option?
什么是工厂方法(只是一些创建新对象并返回它的函数?)
伴侣对象有什么意义?是否只包含可用于所有类实例的函数?他们喜欢Ruby中的类方法吗?
我正在尝试运行一个简单的Scala代码段,
package example
class HelloWorld extends App {
  println("Hello world")
}
在安装了Scala的IntelliJ IDE中.但是,"运行"按钮显示为灰色,我也没有在上下文菜单中看到它(未在下面的屏幕抓取中显示).
根据无法使用Intellij IDEA运行Java代码的答案,代码位于src标记为蓝色的文件夹中.(我也尝试将其标记为'测试'文件夹,但无济于事).我错过了什么?