关于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=>

【Clojure 基本知识】 关于函数参数的各种高级用法的更多相关文章

  1. (读书笔记)函数参数浅析-JavaScript高级程序设计(第3版)

    ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的.在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理. arguments对象只是 ...

  2. Day8 函数指针做函数参数

    课堂笔记 课程回顾         多态 virtual关键字 纯虚函数 virtual func() = 0;         提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数. ...

  3. [C/C++基础知识] main函数的参数argc和argv

    该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...

  4. Js基础知识5-函数返回值、函数参数、函数属性、函数方法

    函数返回值 所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样,return语句不会阻止finally子句的执行. function testF ...

  5. python基础知识06-函数基础和函数参数

    函数基础和函数参数 可迭代对象:序列类型 range . 1.函数的定义 def 函数名(参数): pass return 表达式 ,不能是赋值语句.不写默认返回None.用逗号隔开返回一个元组. 函 ...

  6. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

  7. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  8. swift:入门知识之函数与闭包

    1.swift中使用关键字func来声明和定义一个函数.调用函数使用它的名字加上小括号中的参数列表. 2.swift使用->方向符号分隔参数的名字和返回值类型 3.swift使用元组(tuple ...

  9. 性能测试分享: Jmeter的源码分析main函数参数

    性能测试分享: Jmeter的源码分析main函数参数   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...

随机推荐

  1. layer.load的使用

    在ajax请求和回调返回的过程中,我们一般都要用到layer.load这个方法 例如: //loading层 var index = layer.load(1, { shade: [0.1,'#fff ...

  2. PHP 中的魔法常数

    PHP中的魔法常数 PHP中有很多描述当前状态的魔法函数,可以很方便地获取运行时的局部环境 测试代码及结果如下 <?php namespace NS { function writeln($v= ...

  3. Java面试题集锦

    1. String.StringBuffer和StringBuilder的区别. (1)  String:存储数值不可改变的字符串 (2)  StringBuffer:可变字符序列.线程安全.效率低 ...

  4. Listener(2)—案例

    ServletContext的事件监听器,创建:当前web应用被加载(或重新加载)到服务器中,销毁:当前web应用被卸载 import javax.servlet.ServletContextEven ...

  5. hihocoder1051 补提交卡(贪心)

    http://hihocoder.com/problemset/problem/1051 一开始dfs暴搜超时 这题关键在于理解到,肯定是补连续的几天.所以说写贪心之前要好好想想,怎么贪. //补题卡 ...

  6. MySQL优化之like关键字

    1.%号不放最左边 无法使用索引了,开头是不确定的,MySQL也无法进行优化了,只能扫描表了. 2.使用覆盖索引 如果业务需要%就放开头我们也没办法,一般情况需求都是这样的,毕竟优化还是为业务服务的. ...

  7. CSS魔法堂:那个被我们忽略的outline

    前言  在CSS魔法堂:改变单选框颜色就这么吹毛求疵!中我们要模拟原生单选框通过Tab键获得焦点的效果,这里涉及到一个常常被忽略的属性--outline,由于之前对其印象确实有些模糊,于是本文打算对其 ...

  8. Java全栈程序员之07:IDEA中使用MAVEN构架生产级的Web项目

    在上一篇我们介绍了如何在IDEA中使用MAVEN,以及如何创建依赖等.那么在这一篇中,我们就试图搭建一个生产级的解决方案,大家可以使用这个解决方案作为骨架代码来搭建自己的开发环境. 在这里,我们要完成 ...

  9. 导入的eclipse 中 maven项目,项目中已经加入lombok.jar包,但是不能编译成功

    原文地址:http://bbs.csdn.net/topics/390854507/ 答案是最后一个:单击工程名  Maven->Update Project

  10. 解决Android Studio出现Failed to open zip file. Gradle's dependency cache may be corrupt的问题

    问题如下图所示: 解决: 修改 gradle-wrapper.properties里的gradle的版本,与之前没有报错的gradle版本一致.就可以了 比如我报这个错的时候 : distributi ...