我是一名正在研究
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,5))
然而,重写为Lists.last使其成功.这不是打败导入问题的重点._通配符?我注意到数学函数可以在没有前面的数学的情况下编写.通过导入math._.为什么这对我的文件也不起作用?
真正的目标:我只想创建一个包,然后在另一个文件中使用println轻松测试其功能.最好的方法是什么?我是否可以取消Test.scala中的对象{…}并使用scala运行它,放弃编译过程?
解决方法
Doesn’t that defeat the point of the import problems._ wildcard?
不,不是的.通过使用通配符,您将该包中的所有类/对象放入范围,而不是其内容.
I notice that math functions can be written without a preceding
math.
by doingimport math._
Why won’t this work for my files as well?
它会工作,但你需要一个适当的导入:import problems.Lists._.否则,您可以将功能放入package object.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。