我有三个文件,一个是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)
}
}
}
hello.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类的对象。我无法理解为什么我无法在包中实例化类的对象。
更新:事实证明,代码中没有错误,但在执行方法中。代码给出以下commonds(@ println(new hic)和println(new testpackage.src.hic)) -
scalac *.scala and scala hello.scala
但是,代码可以使用以下命令运行 -
scalac *.scala and scala hello
答案 0 :(得分:0)
hic.scala中有一对额外的{}。
package testpackage.src{
......
}
除了
之外,我已经测试过除掉它之后一切都很好println(new platify.src.hic) // error: type hic is not a member of package platify.src
因为platify
之前从未发生过。
答案 1 :(得分:0)
我认为问题出在包对象hi.scala上。包对象名称应该是您的包名称,文件名应该是 package.scala 。例如,如果我想为“com.mine”创建包对象然后我的包对象名称应该是“我的”。
在您的情况下,如果testpackage.src
被视为您的包裹,那么您的
包对象应该是
package testpackage
package object src {
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)
}
}