Scala 在“比例匹配大小写”中使用定义的对象之前,找不到该对象

Scala 在“比例匹配大小写”中使用定义的对象之前,找不到该对象,scala,pattern-matching,Scala,Pattern Matching,编译器抱怨: C:\Users\name\IdeaProjects\HelloWorld\src\Hell5.sc:4:12 未找到: 值JsTrue case JsTrue=>“true” 我无法在json定义之前移动JsTrue的定义,因为它使用json的定义,因为您使用的是sc脚本,而不是完整的scala文件,所以会逐个计算语句。在普通的scala文件中,这只会起作用。无法重现,这与编译/运行代码的方式有关。尝试将Scala脚本*.sc替换为普通的*.Scala。好的,似乎无法在工作表中运

编译器抱怨:

C:\Users\name\IdeaProjects\HelloWorld\src\Hell5.sc:4:12
未找到:
值JsTrue case JsTrue=>“true”


我无法在
json
定义之前移动
JsTrue
的定义,因为它使用
json

的定义,因为您使用的是
sc
脚本,而不是完整的scala文件,所以会逐个计算语句。在普通的scala文件中,这只会起作用。

无法重现,这与编译/运行代码的方式有关。尝试将Scala脚本
*.sc
替换为普通的
*.Scala
。好的,似乎无法在工作表中运行,因为工作表的工作方式类似于解释器,它逐行编译代码
sealed trait Json {
  def toStringT: String=
    this match {
      case JsTrue => "true"
      case JsFalse => "false"
      case JsNull => "null"
      case JsString(str) => str
      case JsNumber(num) => num.toString
      case JsArrayEmpty => "[]"
      case JsArrayT(head, tial) => s"[${head.toStringT}, ${tial.toStringT}]"
      case JsObjectEmpty => "{}"
      case JsObjectT(pair, tail) => s"${pair.key}: ${pair.value.toStringT} \n ${tail.toStringT}"
    }
}


sealed trait JsArray extends Json
//jsarray
case object JsArrayEmpty extends JsArray
final case class JsArrayT(head:Json, tail:JsArray) extends JsArray

final case class JsString(str:String) extends Json
final case class JsNumber(num:Double) extends Json
case object JsTrue extends Json
case object JsFalse extends Json
case object JsNull extends Json


sealed trait JsObject extends Json
// jsobject
case object JsObjectEmpty extends JsObject
final case class JsPair(key:String, value:Json) {
  def toStringT :String =
    key + ":" + value.toStringT
}
final case class JsObjectT(pair:JsPair, tail:JsObject) extends JsObject