Scala导入问题 – 错误:未找到:值

我是一名正在研究 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 doing import math._ Why won’t this work for my files as well?

它会工作,但你需要一个适当的导入:import problems.Lists._.否则,您可以将功能放入package object.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...