在Scala程序中找不到值
我刚刚开始使用Scala,所以请原谅,如果事实证明这很愚蠢。在Scala程序中找不到值
我想在Scala中实现一个链表。所以,我创建了一个包含MYLIST类和其他文件中MyList.scala
:
abstract class MyList[+A] {
def head : A
def tail : MyList[A]
def isEmpty : Boolean
def add[B>:A](element: B) : MyList[B] = new MyNonEmptyList[B](element,this)
}
object MyEmptyList extends MyList[Nothing]{
override def head: Nothing = throw new NoSuchElementException("Head of an Empty list : ")
override def tail: MyList[Nothing] = throw new NoSuchElementException("Tail of an Empty list!")
override def isEmpty: Boolean = true
override def toString : String = ""
}
case class MyNonEmptyList[A] (head: A, tail:MyList[A]) extends MyList[A]{
override def isEmpty: Boolean = false
override def toString : String = head + ", " + tail.toString
}
雕刻出的基本功能后,是时候对其进行测试。所以,我创建了一个阶工作test.sc
:
object test{
val list = MyNonEmptyList(1,MyEmptyList)
val b = list.head
}
现在,当我尝试运行的代码(上的IntelliJ),我收到以下错误:
Error:(1, 18) not found: value MyNonEmptyList
lazy val list = MyNonEmptyList(1,MyEmptyList)
^
我不明白背后的原因这个错误。当我按Ctrl +单击时,我被重定向到MyList.scala文件中的源代码。
正确的方法是:
- 在测试目录中创建测试文件
- ,也才能正确导入文件到您正在执行测试,而不是与工作表做。
工作表的目的是做REPL操作而不是测试你的src文件。
不起作用。 我不认为改变类的顺序有什么作用。 – Amita
我没有看到您的代码有任何问题。尝试在斯卡拉REPL代码:
scala> :paste
// Entering paste mode (ctrl-D to finish)
abstract class MyList[+A] {
def head : A
def tail : MyList[A]
def isEmpty : Boolean
def add[B>:A](element: B) : MyList[B] = new MyNonEmptyList[B](element,this)
}
object MyEmptyList extends MyList[Nothing]{
override def head: Nothing = throw new NoSuchElementException("Head of an Empty list : ")
override def tail: MyList[Nothing] = throw new NoSuchElementException("Tail of an Empty list!")
override def isEmpty: Boolean = true
override def toString : String = ""
}
case class MyNonEmptyList[A] (head: A, tail:MyList[A]) extends MyList[A]{
override def isEmpty: Boolean = false
override def toString : String = head + ", " + tail.toString
}
// Exiting paste mode, now interpreting.
defined class MyList
defined object MyEmptyList
defined class MyNonEmptyList
scala> val x = MyNonEmptyList(1, MyEmptyList)
x: MyNonEmptyList[Int] = 1,
scala> x.head
res0: Int = 1
因此,对于这个错误,我能想到的唯一理由可能是你test.sc
不会导入MyList.scala
正常。你可以仔细检查你的#import
?
我需要使用scala工作表,以便将代码保存在git上。我试过导入,但那不起作用。 – Amita
您的课程可能在默认包中。您应该创建一个新包并将该类移至新包。 和进口类中使用它
import com.testpackage.{MyEmptyList, MyNonEmptyList}
val list = MyNonEmptyList(1, MyEmptyList)
val b = list.head
您不能导入在默认包中的类。
希望这会有所帮助!
我希望这有助于。我测试以及工作得很好。 –
我得到了一个错误: 错误:对象MyEmptyList不是包com.testpackage的成员 import com.testpackage。{MyEmptyList,MyNonEmptyList}' – Amita
'你是否创建了com.testpackage并在该包内移动MyEmptyList? –
可以分享.scala文件的位置和test.sc –