![](/img/trans.png)
[英]Problems calling a clojure function that takes a map as parameter from java
[英]Clojure: map as function parameter
我正在嘗試運行“使用Clojure進行網絡開發”一書中的一些代碼。 有一個我無法理解的功能:
(defn handle-upload [{:keys [filename] :as file}]
(upload-page
(if (empty? filename)
"please select a file to upload"
(try
(upload-file (gallery-path) file)
(save-thumbnail file)
(db/add-image (session/get :user) filename)
(image {:height "150px"}
(str "/img/"
(session/get :user)
"/"
thumb-prefix
(url-encode filename)))
(catch Exception ex
(str "error uploading file " (.getMessage ex)))))))
哪里
(defn upload-page [info]
(layout/common
[:h2 "Upload an image"]
[:p info]
(form-to {:enctype "multipart/form-data"}
[:post "/upload"]
(file-upload :file)
(submit-button "upload"))))
函數handle-upload
的參數是什么意思?
而從
(defn handle-upload [{:keys [filename] :as file}] ...
至
(defn handle-upload [{:keys filename :as file}] ...
我收到一條錯誤消息:
java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol, compiling:(picture_gallery/routes/upload.clj:32:1)
為什么?
{:keys [filename] :as file}
意思是:
:filename
密鑰,並將其值綁定到filename
file
因此,如果您通過:
{:filename "foo"
:somethingelse "bar"}
作為參數,函數范圍內的filename
等於foo
, file
等於整個哈希圖。
參考文獻:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.