Что мне нужно - это класс XI, который можно построить с помощью карты, которая переносит строки в другие строки или карты, которые переносят строки в строки, а затем произвольное число других экземпляров X. Я знаю, что могу сделать это:
class Person (stringParms : Map[String, String],
mapParms : Map[String, Map[String, String]],
children : List[X]) {
}
но это выглядит не очень Scala-ish ("Scalish"? "Scalerific"? "Scalogical"?) Я хотел бы иметь возможность сделать следующее:
Person bob = Person("name" -> "Bob", "pets" -> ("cat" -> "Mittens", "dog" -> "Spot"), "status" -> "asleep",
firstChild, secondChild)
Я знаю, что могу избавиться от «нового» с помощью объекта-компаньона, и я уверен, что могу посмотреть Scala varargs. То, что я хотел бы знать, это:
- Как я могу использовать -> (или некоторый похожий правдоподобный оператор) для конструирования элементов, которые должны быть превращены в карту в конструкции?
- Как я могу определить одну карту, чтобы она могла выполнять переключение по типу Option между двумя очень разнородными типами или превращалась в рекурсивное дерево, где каждый (именованный) узел указывает либо на лист в форме строки, либо узел похож на себя?
Рекурсивная версия действительно мне нравится, потому что, хотя она и не решает проблему, с которой я на самом деле сталкиваюсь сегодня, она аккуратно отображается в подмножество JSON, содержащее только объекты и строки (без чисел или массивов).
Любая помощь, как всегда, очень ценится.