在比例匹配的情况下使用之前,找不到定义的对象

问题描述

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

编译器抱怨:

C:\ Users \ name \ IdeaProjects \ HelloWorld \ src \ Hell5.sc:4:12
找不到:
值JsTrue大小写JsTrue =>“ true”

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

解决方法

由于您使用的是sc脚本而不是完整的Scala文件,因此对语句进行了逐一评估。在普通的scala文件中,它将正常工作。