簡體   English   中英

Clojure:映射為函數參數

[英]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}意思是:

  1. 從傳遞的參數中獲取:filename密鑰,並將其值綁定到filename
  2. 將整個參數保留為file

因此,如果您通過:

{:filename "foo"
 :somethingelse "bar"}

作為參數,函數范圍內的filename等於foofile等於整個哈希圖。

參考文獻:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM