关于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. python系统编程(一)

    进程的创建-fork 1. 进程 VS 程序 编写完毕的代码,在没有运行的时候,称之为程序 正在运行着的代码,就成为进程 进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的 2. fo ...

  2. Linux硬盘管理

    管理好硬盘/dev/xxynsd SCSI SATA USBhd IDE主分区扩展分区 1-4逻辑分区5以后fdisk -l 硬盘名/分区名fdisk -l /dev/sda 如何给硬盘分区?把500 ...

  3. yii2 数据提供者 dataProvider

    数据提供者 dataProvider $dataProvider = new ActiveDataProvider([ 'query' => $query, // 如何来取得数据 'pagina ...

  4. Egret 按钮点击缩放效果

    非代码设计,exml直接操作 设计模式下选中对象,之后[源码],会直接定位到该对象在exml源码中的位置 width.down = "100%" 表示当按钮按下的时候宽度为 100 ...

  5. sqlserver数据类型转换

    Insert into [Cet.4] Select CONVERT(VARCHAR(20),CONVERT(DECIMAL(20,7),F1)) FROM Sheet1$ 我从外部导入了一个学号表, ...

  6. xcode9上传app时报错iTunes Store operation failed 解决方案

    问题 上传至itunes Connect时报了两个错: iTunes Store Operation Failed ERROR ITMS-xxxxx:"description length: ...

  7. angular清除select空格

    <select   class="form-control"   id="policy_set_id"   ng-model="add.poli ...

  8. HTML5 学习04—— MathML数学标记

    MathML 元素标签: <math>...</math> MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置 ...

  9. vim8.0模式详解

    pattern pattern.txt For Vim version 8.0. 最近更新: 2017年8月 VIM 参考手册 by Bram Moolenaar 译者: lang2 http://v ...

  10. 小程序学习笔记五:API

    API 小程序提供了丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等. api调用格式: 1:wx.on 开头的 API 是监听某个事件发生的API接口,接受一 ...