关于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. LINUX文件及目录管理命令基础(2)

    Linux文件类型 文件作为Linux操作系统中最常见的对象,在系统中被分为了多种类型 如下: - 普通文件 d 目录 l 链接 b 块设备 c 字符设备 p 管道设备 s 套接字文件 Linux目录 ...

  2. fatal: You are not currently on a branch. 问题解决

    fatal: You are not currently on a branch. 解决 注:亲试,这种方法会把本地的修改给冲掉,所以事先一定要备份下文档,之后覆盖,重新上传或pull即可:解决方法: ...

  3. Celery框架

    在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...

  4. JAVA自学笔记19

    JAVA自学笔记19 1.集合总结 Collection(单列集合) List(有序可重复) ArrayList:底层数据结构是数组 ,查询快,增删慢.线程不安全,效率高 Vector:底层数据结构是 ...

  5. R12.2常用手册

    >>Related Information Sources这本书包含在Oracle电子商务套件文档库中.如果该指南将您引用到其他Oracle电子商务套件文档中,只使用这些指南的最新版本12 ...

  6. gpg使用说明

    http://blog.163.com/ywz_306/blog/static/13257711201121921452480/

  7. ionic android升级检查

    https://www.cnblogs.com/zxj159/p/4421578.html 坑: 放到cordova.file.DataDirectory下载异常? 只好cordova.file.ex ...

  8. ionic 视图滚动到顶部

    问题描述 进入页面, 滚动到底部 点击一个连接, 当前视图内容更新了 内容滚动到了上次的位置导致底部的内容没显示 需要控制自动回滚到顶部 <ion-content delegate-handle ...

  9. markdownpad目录格式配置

    表格语法 | Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | right-aligned | ...

  10. 解决python多版本共存问题

    1.cmd下,python时,默认是python3版本, 2.打开D:\Anaconda2 3.找到exe文件,python.exe和pythonw.exe,将其修改为python2.exe和pyth ...