无法在包

时间:2016-12-20 11:34:25

标签: scala

我有三个文件,一个是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

2 个答案:

答案 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)
    }
}

Additional Info

相关问题