有人可以解释以下结果背后的原因是什么(assoc-in)
吗?
(assoc-in {:foo {:bar {:baz "hello"}}} [:foo :bar] "world")
=> {:foo {:bar "world"}}
(assoc-in {:foo {:bar nil}} [:foo :bar :baz] "world")
=> {:foo {:bar {:baz "world"}}}
(assoc-in {:foo {:bar "hello"}} [:foo :bar :baz] "world")
=> ClassCastException java.lang.String cannot be cast to clojure.lang.Associative clojure.lang.RT.assoc (RT.java:702)
显然我可以更换地图,甚至nil
另一种数据类型(例如字符串),但我不能用地图替换数据类型(例如字符串),因为它需要该数据类型已经是地图。
以及如何解决这个问题?我想实现以下目标:
(assoc-in {:foo {:bar "hello"}} [:foo :bar :baz] "world")
=> {:foo {:bar {:baz "world"}}}