我有三个文件,一个是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类的对象。我不能理解为什么我不能在包中实例化一个类的对象。
更新:事实证明,代码中没有错误,而是执行方法中有错误。代码给出了以下逗号(@ println(新hic)和println(新testpackage.src.hic))的错误-
scalac *.scala and scala hello.scala但是,使用以下命令可以很好地运行代码-
scalac *.scala and scala hello发布于 2016-12-20 20:12:05
hic.scala中有一对额外的{}。
package testpackage.src{
......
}我已经测试过在移除它之后一切都很好,除了
println(new platify.src.hic) // error: type hic is not a member of package platify.src因为platify以前从未发生过。
发布于 2016-12-20 20:27:51
我认为问题出在包对象hi.scala上。
在您的示例中,如果要将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)
}
}https://stackoverflow.com/questions/41241401
复制相似问题