【发布时间】:2017-05-05 14:45:53
【问题描述】:
我有三个文件,一个是hi.scala,第二个是hic.scala,第三个是hello.scala。两者的代码如下:
hi.scala
package testpackage.src
package object hi {
def abs(x: Double) = if (x>=0) x else -x
def sqrt(x: Double) = {
def sqrtIter(guess: Double, x: Double): Double =
if(isGoodGuess(guess,x)) guess
else sqrtIter(improve(guess,x),x)
def isGoodGuess(guess: Double, x: Double) =
abs(guess * guess - x)/x < .0001
def improve(guess: Double, x: Double) =
(guess + x / guess)/2
sqrtIter(1.0, x)
}
}
hic.scala
package testpackage.src{
class hic {
def abs(x: Double) = if (x>=0) x else -x
def sqrt(x: Double) = {
def sqrtIter(guess: Double, x: Double): Double =
if(isGoodGuess(guess,x)) guess
else sqrtIter(improve(guess,x),x)
def isGoodGuess(guess: Double, x: Double) =
abs(guess * guess - x)/x < .0001
def improve(guess: Double, x: Double) =
(guess + x / guess)/2
sqrtIter(1.0, x)
}
}
}
你好.scala
import testpackage.src._
object hello {
def main(args: Array[String]): Unit = {
println(hi.sqrt(2)) //works fine
println(hi.abs(-2)) //works fine
println(new hic) // error: not found: type hic
println(new testpackage.src.hic) // error: type hic is not a member of package testpackage.src
}
}
我能够访问 hi.scala 文件的 hi 对象的 sqrt 和 abs 方法,但我无法实例化 hic.scala 文件的 hic 类的对象。我无法理解为什么我无法在包中实例化类的对象。
更新:事实证明,代码中没有错误,而是在执行方法中。代码给出了以下常见错误(@ println(new hic)和println(new testpackage.src.hic)) -
scalac *.scala and scala hello.scala
但是,使用以下命令,代码运行良好 -
scalac *.scala and scala hello
【问题讨论】:
-
这里似乎有些不对劲。如果不先实例化它,您当然不能从类中调用这些方法。你也有
hiobject 以及类吗?你提到new hi给出一个错误 - 错误是什么? -
我已经更新了问题,有一个已编译的 .class 文件,它有一个包对象 hi,我可以使用它调用 sqrt 和 abs 方法。这是我的错误(我是 scala 的新手)。现在,我只是无法理解为什么我无法在包中实例化一个类。
-
你有什么叫“hi”的包吗?
-
不,我有一个名为 testpackage.src 的包。 hi 是 hi.scala 文件中 package testpackage.src 的一个包对象。
标签: scala