在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文件中的源代码。

+0

可以分享.scala文件的位置和test.sc –

正确的方法是:

  1. 在测试目录中创建测试文件
  2. ,也才能正确导入文件到您正在执行测试,而不是与工作表做。

工作表的目的是做REPL操作而不是测试你的src文件。

+0

不起作用。 我不认为改变类的顺序有什么作用。 – 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

+0

我需要使用scala工作表,以便将代码保存在git上。我试过导入,但那不起作用。 – Amita

您的课程可能在默认包中。您应该创建一个新包并将该类移至新包。 和进口类中使用它

import com.testpackage.{MyEmptyList, MyNonEmptyList} 

val list = MyNonEmptyList(1, MyEmptyList) 

val b = list.head 

您不能导入在默认包中的类。

希望这会有所帮助!

+0

我希望这有助于。我测试以及工作得很好。 –

+0

我得到了一个错误: 错误:对象MyEmptyList不是包com.testpackage的成员 import com.testpackage。{MyEmptyList,MyNonEmptyList}' – Amita

+0

'你是否创建了com.testpackage并在该包内移动MyEmptyList? –