Для синтаксического анализа рекурсивного метода Json4S требуется тип результата

Я использую библиотеку json4s в своей программе Scala.

мой build.sbt выглядит как

libraryDependencies ++= Seq(
  "org.json4s" % "json4s-native_2.11" % "3.3.0"
)

в моем коде у меня есть функция

import org.json4s._
import org.json4s.native.JsonMethods._
import org.json4s.JValue
class Foo {
    def parse(content: String) = {
      val json  = parse(content)
    }
}

но IDE жалуется: "Для рекурсивного синтаксического анализа метода требуется тип результата"


person Knows Not Much    schedule 05.02.2016    source источник


Ответы (1)


Компилятор scala обычно определяет возвращаемый тип методов на основе их реализаций, но у него возникают проблемы с определением типа рекурсивных методов.

Сообщение recursive method parse needs result type связано с этим недостатком. Ваш def parse(content: String) рекурсирует, позвонив parse(content). Это делает метод рекурсивным (бесконечно, но я предполагаю, что вы планировали изменить его позже). Чтобы он скомпилировался, вам необходимо явно указать тип возвращаемого значения, например def parse(content: String): Unit.

Я собираюсь сделать следующее предположение и скажу, что существует метод parse, импортируемый либо из json4s, либо из JsonMethods. Это затеняется вашим собственным parse методом из-за того, что он имеет ту же сигнатуру метода. Если вы действительно хотите позвонить JsonMethods.parse, вам нужно будет сказать JsonMethods.parse, чтобы прояснить двусмысленность.

person Dylan    schedule 05.02.2016