zoukankan      html  css  js  c++  java
  • 【Clojure 基本知识】 关于函数参数的各种高级用法

    关于Clojure函数参数用法,学习中一些总结,无废话,直接看代码:

    一、接受不定参数

    ;;接受不定参数
    (defn f0[& pms]
        (println "params count=" (count pms) " type pms=" (type pms))
      (doseq [pm pms]
            (println pm)
        )
    )

    ;;调用示例

    ;;调用示例
    user=> (f0 "abc" 111 :err) params count= 3 type pms= clojure.lang.ArraySeq abc 111 :err nil user=>

    二、接受map参数,map可为空或缺失部分或全部关键字,解构出的参数值为nil

    ;;接受map参数,map可为空或缺失关键字,解构出的参数值为nil
    (defn f1[pm  {:keys [key value]}]
     (println "pm->" pm)
     (println "key->" key)
     (println "value->" value) 
    )

    ;;调用示例

    user=> (f1 "abc" {:key "kk" :value 1})
    pm-> abc
    key-> kk
    value-> 1
    nil
    user=> (f1 "abc" {:key "k2"})
    pm-> abc
    key-> k2
    value-> nil
    nil
    user=> (f1 "abc" {})
    pm-> abc
    key-> nil
    value-> nil
    nil
    user=>

    三、接受map参数,为解构参数设置默认值

    ;;接受map参数,为解构参数设置默认值
    (defn f11[pm  {:keys [key value] :or {key "def-key" value "def-value"}}]
     (println "pm->" pm)
     (println "key->" key)
     (println "value->" value) 
    )

    ;;调用示例

    user=> (f11 "abc" {:key "kk" :value 1})
    pm-> abc
    key-> kk
    value-> 1
    nil
    user=> (f11 "abc" {:key "k2"})
    pm-> abc
    key-> k2
    value-> def-value
    nil
    user=> (f11 "abc" {})
    pm-> abc
    key-> def-key
    value-> def-value
    nil
    user=>

    四、可选命名参数

    ;;可选命名参数
    (defn f2[pm & {:keys [key value]}]
     (println "pm->" pm)
     (println "key->" key)
     (println "value->" value) 
    )

    ;;调用示例

    user=> (f2 "abc" :key "kk" :value 1)
    pm-> abc
    key-> kk
    value-> 1
    nil
    user=> (f2 "abc" :key "k2")
    pm-> abc
    key-> k2
    value-> nil
    nil
    user=> (f2 "abc" )
    pm-> abc
    key-> nil
    value-> nil
    nil
    user=>

    五、有默认值的可选命名参数

    ;;有默认值的可选命名参数
    (defn f22[pm & {:keys [key value] :or {key "def-key" value "def-value"}} ]
     (println "pm->" pm)
     (println "key->" key)
     (println "value->" value) 
    )

    ;;调用示例

    user=> (f22 "abc" :key "kk" :value 1)
    pm-> abc
    key-> kk
    value-> 1
    nil
    user=> (f22 "abc" :key "k2")
    pm-> abc
    key-> k2
    value-> def-value
    nil
    user=> (f22 "abc" )
    pm-> abc
    key-> def-key
    value-> def-value
    nil
    user=>
  • 相关阅读:
    利用XShell上传、下载文件(使用sz与rz命令)
    我做的一个websocket的demo(php server)
    linux下如何实现mysql数据库每天自动备份定时备份
    php利用ob缓存机制实现页面静态化方法全解
    MySQL数据备份之mysqldump使用
    将jpg压缩成webp格式的图片
    ab网站压力测试命令的参数、输出结果的中文注解
    网页优化实例
    JQ 为未来元素添加事件处理器—事件委托
    Web前端优化最佳实践及工具集锦
  • 原文地址:https://www.cnblogs.com/dajianshi/p/9758903.html
Copyright © 2011-2022 走看看