1. 程式人生 > >【Clojure 基本知識】 關於函式引數的各種高階用法

【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 基本知識 關於函式引數各種高階用法

關於Clojure函式引數用法,學習中一些總結,無廢話,直接看程式碼: 一、接受不定引數 ;;接受不定引數 (defn f0[& pms] (println "params count=" (count pms) " type pms=" (type pms)) (doseq [pm p

Clojure 基本知識小技巧s

;;模擬console原位更新輸出 ;;空格擦除法,輸出空格,是為了擦除短字串尾部沒有佔用的位置,因為退格只是回退,並不刪除(dotimes [_ 10](let [n (rand) sn (.substring (str n ) 2) len (count sn)](print sn)(flush)(Th

Clojure 基本知識 ns巨集的 指令(關鍵字) requrie的用法

    指令(:require)用在(ns)之中,下面是實踐中總結的幾種用法(下文中省略ns巨集,只是給出:require的程式碼): 一、匯入完整名稱空間。 1,最簡單的形式: (:require clojure.data.json) 2,同時匯入同一名稱空間的多個子名稱空間: (:require

Python基礎知識基本數據類型:數字、字符串、列表、元組、字典、集合

tuple 位置 環境 htm 邏輯 python3 修改 yield 啟動 1.查看Python版本 python -V 2.Windows系統下使用命令行設置環境變量:path=%path%;D:\Python 3.幾個重要的Python環境變量 PYTHONPA

Java基礎知識JDBC基本操作

Jdbc簡介 JDBC(Java Data Base Connectivity )(java 資料庫連線) 可以為多種資料庫提供統一的資料庫訪問。 JDBC使用詳解 JDBC程式設計步驟 1.      載入驅動程式:Class.forName(driverClas

C語言函式引數中的const修飾符

  通常,字串操作函式原型中,都會在形參前面加上const修飾符,表示此指標不能用於修改字串的值   比如:char *strcpy(char *strDest, constchar *strSrc)

PHP基礎知識——常用字串處理函式總結

一、概要 我們知道,字串操作是主流web程式語言的基礎,也是在日常開發中不可或缺的一項。PHP處理字串的能力非常強大,方法也是多種多樣。文章列舉了一些PHP中常見的字串處理方法。二、常用字串處理方法 1、判斷一個字串的長度:intstrlen ( string $strin

SSH---Struts2、Hibernate5、Spring4散點知識

作用域 才會 進行 namespace sci 3.2 對象關系映射 工作 XML 一、Struts21.1、Struts2的概念Struts2是一個用來開發MVC應用程序的框架,它提供了Web應用程序開發過程中的一些常見問題的解決方案: ->對來自用戶的輸入數

網絡知識1http、tcp/udp、soap的區別

target https tar 網絡知識 soa 區別 ext soap udp 一句話總結: soap信息可以通過http協議包裝後通過tcp或udp傳輸參考:https://zhidao.baidu.com/question/617706398106243452.ht

01月29日Python3 基礎知識

python01月29日【Python3 基礎知識】 5.4 參數匿名函數字典排序 5.5 生成式和生成器 5.6 裝飾器的作用 5.4 參數匿名函數字典排序 # *元組;**字典 def add(*args): total = 0 for i in args: t

01月24日Python3 基礎知識

python01月24日【Python3 基礎知識】 3.4 統計字符串 3.5 乘法口訣 3.4 統計字符串 # 統計字符串給類型符號個數 s = n = f = 0 st = input("隨意輸入字符:") for i in st: if i.isalpha(): s

01月22日Python3 基礎知識

python01月22日【Python3 基礎知識】 2.4 計算器 2.5 tuple操作 2.6 dict 2.7 其他常用操作 2.4 計算器 def add(string): total = 0 numbers = [] numbers += string.spl

01月19日Python3 基礎知識

python2.1 數據類型 2.2 字符串 2.3 list操作 2.1 數據類型 # Ptyhon運算符 ‘‘‘ 數字運算符: + - * / % 關系運算符: a == b a>b a<b a!=b >= <= 賦值運算符: a = b += -= *=

01月26日Python3 基礎知識

python01月26日【Python3 基礎知識】 5.1 九宮格 5.2 函數入門 5.3 判斷某天為某年的第幾天 5.1 九宮格 import random x = 0 l = [1,2,3,4,5,6,7,8,9] print("*************") while len(l) !

01月23日Python3 基礎知識

python01月23日【Python3 基礎知識】 3.1 if/while/for 3.2 解決數學難題 3.3 Python實例 3.1 if/while/for ‘‘‘ # if 判斷條件: 執行語句 elif 判斷條件: 執行語句 else: 執行語句 # whi

01月25日Python3 基礎知識

python01月25日【Python3 基礎知識】 4.1 讀寫文件 4.2 文件方法 4.3 python2的亂碼問題 4.4 python對passwd文件進行排序 4.1 讀寫文件 訪問 模式 說 明 r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。

01月18日Python3 基礎知識

python1.1 Python的安裝1.2 pycharm安裝1.3 pycharm快捷鍵1.4 pycharm其他設置 1.1 Python的安裝 Python的重要性 python 流行程度 近幾年內已經擠進前五名,慢慢已經成為一個開發者或運維必須掌握的一門語言 隨著現在運維自動化,雲計算,虛擬化,機

C/C++開發函式使用結構體、結構體指標作為返回值分析

函式使用結構體、結構體指標作為返回值分析 32位機,gcc編譯器 使用結構體作為返回值 分析反彙編程式碼可知,當被呼叫的子函式返回值為結構體的時候,呼叫函式將分配一段空間用於存放返回的結構體(使用一個結構體變數接受返回值),並將這段空間的地址作為呼叫時的引數壓棧。子程式不負責對要返回的結構體分

C/C++開發函式指標與回撥函式

C++很多類庫都喜歡用回撥函式,MFC中的定時器,訊息機制,hook機制等待,包括現在在研究的cocos2d-x中也有很多的回撥函式。 1.回撥函式 什麼是回撥函式呢?回撥函式其實就是一個通過函式指標呼叫的函式!假如你把A函式的指標當作引數傳給B函式,然後在B函式中通過A函式傳進來的這個指標

07-jsp基本瞭解

jsp 動態網頁技術:伺服器和使用者互動的動態網頁技術jsp【java server page 】jsp ≈ html +servletjsp 檔案是以 *.jsp結尾:jsp檔案 靠伺服器執行,jsp 是伺服器端指令碼語言jsp 解決的問題:servlet將資料傳到html ,html 無法展示j