#scala #pattern-matching
#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
компилятор жалуется:
C:UsersnameIdeaProjectsHelloWorldsrcHell5.sc:4:12
не найдено:
значение JsTrue case JsTrue => «true»
Я не мог переместить определение JsTrue
перед json
определением, потому что оно использует определение json
Комментарии:
1. Не удается воспроизвести scastie.scala-lang.org/YkDF124FQgGCr8fHlZs37Q
2. Это связано с тем, как вы компилируете / запускаете свой код. Попробуйте заменить Scala script
*.sc
на обычный*.scala
.3. Хорошо, похоже, что его нельзя запустить на рабочем листе
4. это потому, что рабочий лист работает как интерпретатор и компилирует код построчно
Ответ №1:
Поскольку вы используете sc
скрипт, а не полный файл scala, операторы вычисляются один за другим. В обычном файле scala это будет просто работать.