为什么我的 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 还显示符号 Hello
、assert
和 ==
的错误 "Cannot resolve symbol"。这让我相信构建设置不正确,但是导入时不会出现错误吗?
问题是这个表达式:
new Hello.sayHelloTo("Scala")
这将创建在值 Hello
上定义的 class sayHelloTo
的新实例。但是,没有值 Hello
,只有 class Hello
.
你要这样写:
(new Hello).sayHelloTo("Scala")
这将创建 class Hello
的新实例并在该实例上调用 sayHelloTo
。
或者您可以使用 new Hello().sayHelloTo(...)
。写()应该是创建一个新的实例,然后调用方法。
我开始使用 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 还显示符号 Hello
、assert
和 ==
的错误 "Cannot resolve symbol"。这让我相信构建设置不正确,但是导入时不会出现错误吗?
问题是这个表达式:
new Hello.sayHelloTo("Scala")
这将创建在值 Hello
上定义的 class sayHelloTo
的新实例。但是,没有值 Hello
,只有 class Hello
.
你要这样写:
(new Hello).sayHelloTo("Scala")
这将创建 class Hello
的新实例并在该实例上调用 sayHelloTo
。
或者您可以使用 new Hello().sayHelloTo(...)
。写()应该是创建一个新的实例,然后调用方法。