部屋を番号で削除したい。ご覧のとおり、部屋は原子リストであり、原子が含まれています。例外が発生しました:IllegalArgumentException ISeqを作成する方法がわかりません:core.main $ delete_room_by_id $ fn__7541 clojure.lang.RT.seqFrom(RT.java:487)
私はこのコードを持っています:
(comment ------------- * DATA * ----------------- )
(def rooms "atomic list of atoms - rooms" (atom '()))
(comment ------------- * UTILS * ----------------- )
(defn enter-value [message]
(do (println message) (read-line)))
(comment ------------- * ADD ROOM * ----------------- )
(defn save-room "The function that will save provided room."
[number num-of-beds price]
(swap! rooms conj (atom {:number number
:num-of-beds num-of-beds
:price price
:is-ocupated false})))
(defn enter-room "This function will create room based on user input." []
(let [number (enter-value "Number...")
num-of-beds (enter-value "Number of beds...")
price (enter-value "Price...")]
(save-room number num-of-beds price)))
(comment ------------- * DELETE ROOM * ----------------- )
(defn delete-room-by-number "Delete room by number."
[number]
(swap! rooms remove #(not (= (:number @%) number))))
そのスワップだと思います!関数は私が望むように関数を削除するためのパラメータを入れません。最後のコマンドは:(部屋を削除する#(not(=(:number @%)number)))だと思います。@roomsのような部屋の参照を解除し、remove関数の2番目のパラメーターとして渡す必要があるため、これは適切ではありません。
これを読んでくれてありがとう。