Учитывая проект JsonExample в проекте монокля, я хотел бы создать объектив, в котором заданный вызов либо заменит значение в паре ключ/значение, либо создаст пару ключ/значение если он еще не существует.Scala: как повысить значение поля в Monocle
Однако это, кажется, представляется либо с индексом (который может сочинить типа сейфа) или на, который не типобезопасен
//for replacing:
(jsObject composeOptional index("age") composePrism jsNumber).set(45)
//for creating:
(jsObject composeLens at("age")).set(JsNumber(45)) <- will accept any old json
Это то, что я после того, как это возможно?
Также я мог продлить его, таким образом, что если возраст был вложен в другой JSObject, например:
val n = (jsObject composeOptional index("nested") composePrism
jsObject composeOptional index("age") composePrism jsNumber).set(45)
Если пара ключа/значения для «вложенного» техника его подводит еще существует, что бы создать объект в вложенном а затем добавить поле
n(JsObject(Map.empty)) -> JsObject(Map("nested" -> JsObject("age" -> JsNumber(45)))
Было бы неплохо, если бы вы также указали свои определения 'jsObject' и' jsNumber' – Odomontois
И экземпляр 'Index' – Odomontois
Похоже, проблема заключается в реализации' compose ... 'в необязательном типе. Он обрабатывается методом 'modify'. Который отбрасывает внутренний набор, если оригинал «Нет» – Odomontois