博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Clojure 基本知识】 关于函数参数的各种高级用法
阅读量:6280 次
发布时间:2019-06-22

本文共 1725 字,大约阅读时间需要 5 分钟。

关于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.ArraySeqabc111:errniluser=>

二、接受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-> abckey-> kkvalue-> 1niluser=> (f1 "abc" {:key "k2"})pm-> abckey-> k2value-> nilniluser=> (f1 "abc" {})pm-> abckey-> nilvalue-> nilniluser=>

三、接受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-> abckey-> kkvalue-> 1niluser=> (f11 "abc" {:key "k2"})pm-> abckey-> k2value-> def-valueniluser=> (f11 "abc" {})pm-> abckey-> def-keyvalue-> def-valueniluser=>

四、可选命名参数

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

;;调用示例

user=> (f2 "abc" :key "kk" :value 1)pm-> abckey-> kkvalue-> 1niluser=> (f2 "abc" :key "k2")pm-> abckey-> k2value-> nilniluser=> (f2 "abc" )pm-> abckey-> nilvalue-> nilniluser=>

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

;;有默认值的可选命名参数(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-> abckey-> kkvalue-> 1niluser=> (f22 "abc" :key "k2")pm-> abckey-> k2value-> def-valueniluser=> (f22 "abc" )pm-> abckey-> def-keyvalue-> def-valueniluser=>

 

转载地址:http://phnva.baihongyu.com/

你可能感兴趣的文章
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>