我是一名正在研究Scala的Haskeller。我遇到了挫折,不是代码,而是导入/包。
我有两个文件,Test.scala
和Lists.scala
。
// Lists.scala
package problems
object Lists {
def last(list: List[Any]): Option[Any] = list match {
case Nil => None
case x :: Nil => Some(x)
case _ :: xs => last(xs)
}
}
和
// Test.scala
import problems._
object Test extends App {
println("Starting tests...")
println(last(List(1,2,3,4,5)))
}
Test.scala
无法编译。运行scalac Test.scala Lists.scala
会产生:
Test.scala:5: error: not found: value last
println(last(List(1,2,3,4,5))
然而将last
重写为Lists.last
会使其成功。这不是打败了import problems._
通配符的意思吗?我注意到,通过执行math.
,可以在没有前面import math._
的情况下编写数学函数。为什么这对我的文件也不起作用?
真正的目标:我只想创建一个包,然后在另一个文件中使用println
轻松测试其功能。最好的方法是什么?我是否可以取消object {...}
中的Test.scala
并使用scala
运行它,放弃编译过程?
答案 0 :(得分:9)
不能解决导入问题._通配符?
不,它没有。通过使用通配符,您可以将该包中的所有类/对象放入范围,但不是其内容。
我注意到数学函数可以在没有前面的
math.
的情况下编写import math._
为什么我的文件也能胜任这项工作?
它会起作用,但您需要正确导入:import problems.Lists._
。否则,您可以将功能放入package object。