【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=>
【Clojure 基本知识】 关于函数参数的各种高级用法的更多相关文章
- (读书笔记)函数参数浅析-JavaScript高级程序设计(第3版)
ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的.在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理. arguments对象只是 ...
- Day8 函数指针做函数参数
课堂笔记 课程回顾 多态 virtual关键字 纯虚函数 virtual func() = 0; 提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数. ...
- [C/C++基础知识] main函数的参数argc和argv
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...
- Js基础知识5-函数返回值、函数参数、函数属性、函数方法
函数返回值 所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样,return语句不会阻止finally子句的执行. function testF ...
- python基础知识06-函数基础和函数参数
函数基础和函数参数 可迭代对象:序列类型 range . 1.函数的定义 def 函数名(参数): pass return 表达式 ,不能是赋值语句.不写默认返回None.用逗号隔开返回一个元组. 函 ...
- 深入理解javascript函数参数与闭包(一)
在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- swift:入门知识之函数与闭包
1.swift中使用关键字func来声明和定义一个函数.调用函数使用它的名字加上小括号中的参数列表. 2.swift使用->方向符号分隔参数的名字和返回值类型 3.swift使用元组(tuple ...
- 性能测试分享: Jmeter的源码分析main函数参数
性能测试分享: Jmeter的源码分析main函数参数 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...
随机推荐
- BZOJ1482 : [Balkan2017]Cats
若猫和狗中至少有一个出现了$0$次,那么答案显然是$0$,否则若狮子出现了$0$次,那么显然无解. 那么现在至少有一个动物保持原地不同,其它动物恰好移动一次. 如果全部猫都不动而全部狗都动,那么可以贪 ...
- js 继承 原型链
这里先说基于原型链实现的继承.那首先就得明白什么是原型链了: 每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针. 那么,假如我们让原型对象等于 ...
- usaco-5.3.3Network of Schools 校园网
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意如果 B 在 A 学校的分发列表中,那么 A 不必也在 B 学校的列表中. 你要 ...
- Vue(二十三)vuex + axios + 缓存 运用 (以登陆功能为例)
(一)axios 封装 (1)axios拦截器 可以在axios中加入加载的代码... (2)封装请求 后期每个请求接口都可以写在这个里面... (二)vuex user.js import { lo ...
- poj1182 食物链(并查集 好题)
https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...
- 最新版Xamarin Mono For Android、Monotouch 安装、破解(实时同步更新)
以上链接如不是最新,以官方为主,官方更新地址如下:http://xamarin.com/installer_assets/v3/Mac/Universal/InstallationManifest.x ...
- import tensorflow 报错: tf.estimator package not installed.
import tensorflow 报错: tf.estimator package not installed. 解决方案1: 安装 pip install tensorflow-estimator ...
- IntelliJ IDEA 下载安装(含注册码)
https://blog.csdn.net/mashuai720/article/details/79389314
- 【网络安全】SSLSplit实现中间人攻击
中间人攻击,即在中间监听获取网络数据以便获取的有价值的信息实现攻击破坏的目的,即client-mid man-server,此处介绍的sslsplit可以作为mid man监听ssl信息及HTTP信息 ...
- 一步步教你轻松学支持向量机SVM算法之理论篇1
一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...