我正在尝试运行"使用Clojure进行Web开发"一书中的一些代码.有一个我无法理解的功能:
(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)))))))
Run Code Online (Sandbox Code Playgroud)
哪里
(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"))))
Run Code Online (Sandbox Code Playgroud)
函数参数的含义是什么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从传递的参数中获取键并将其值绑定到filenamefile所以,如果你通过:
{:filename "foo"
:somethingelse "bar"}
Run Code Online (Sandbox Code Playgroud)
作为参数,那么filename在函数范围中将等于foo并且file将等于整个哈希映射.
参考文献:
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |