为什么我的 Scala class 对其匹配测试 class 不可见?

Why is my Scala class not visible to its matching test class?

我开始使用 Scala 和 SBT,制作一个 Hello World 程序。

这是我的项目布局:

我已确保下载最新的 JDK 和 Scala,并配置我的项目设置。这是我的 build.sbt:

name := "Coursera_Scala"

version := "1.0"

scalaVersion := "2.11.6"

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"

Hello.scala 本身可以编译:

package demo

class Hello {
  def sayHelloTo(name: String) = "Hello, $name!"
}

然而,我的陪伴HelloTest.scala却没有。这是测试:

package demo

import org.scalatest.FunSuite

class HelloTest extends FunSuite {

  test("testSayHello") {
    val result = new Hello.sayHelloTo("Scala")
    assert(result == "Hello, Scala!")
  }

}

这是错误:

Error:(8, 22) not found: value Hello
    val result = new Hello.sayHello("Scala")
                 ^

除了编译错误之外,Intellij 还显示符号 Helloassert== 的错误 "Cannot resolve symbol"。这让我相信构建设置不正确,但是导入时不会出现错误吗?

问题是这个表达式:

new Hello.sayHelloTo("Scala")

这将创建在值 Hello 上定义的 class sayHelloTo 的新实例。但是,没有值 Hello,只有 class Hello.

你要这样写:

(new Hello).sayHelloTo("Scala")

这将创建 class Hello 的新实例并在该实例上调用 sayHelloTo

或者您可以使用 new Hello().sayHelloTo(...)。写()应该是创建一个新的实例,然后调用方法。