【clojure】cljs的各种参数判断

文章目录

    • 1.限制传值为数字型
    • 2.判断多个传值不为空
    • 3.判断变量是否为true的方法
    • 3.用seq判断用户的多个传值是否为空
    • 4.校验循环判断值是否为空
    • 5.取反操作
    • 6.查找map中某个键是否存在
    • 7.doall的方法使用
    • 8.获取到的全部信息写入粘贴板

1.限制传值为数字型

在Clojure中,传递参数是没有类型限制的,因为Clojure是一种动态类型语言。这意味着你可以传递任何类型的值作为参数。
如果你想限制参数的类型为数字类型,你可以在函数内部使用number?函数来检查参数的类型

(defn my-func [x]
  (if (number? x)
    (println "参数是一个数字")
    (println "参数不是一个数字")))

(my-func 10) ; 输出:参数是一个数字
(my-func "hello") ; 输出:参数不是一个数字

2.判断多个传值不为空

使用 if 或者 when 来判断多个值是否为空,并执行相应的操作

(defn my-func [x y z]
  (if (and (not (empty? x))
           (not (empty? y))
           (not (empty? z)))
    (do
      (println "调用方法的函数"))
    (println "传值为空,请提供有效的参数")))

(my-func "a" "b" "c") ; 输出:调用方法的函数
(my-func "a" "" "c") ; 输出:传值为空,请提供有效的参数

my-func 函数接受三个参数 x、y 和 z。使用 and 来同时检查三个参数是否为空。如果三个参数都不为空,就会执行 do 代码块中的内容,即调用方法的函数。否则,输出提示信息 “传值为空,请提供有效的参数”。

注意,这里使用了 empty? 函数来判断参数是否为空。empty? 函数可以检查字符串、列表、向量、集合等是否为空。
如果你需要判断其他类型的值是否为空,可以使用相应的函数,如 nil? 来判断是否为 nil。

3.判断变量是否为true的方法

使用true?函数来判断一个变量是否为真。true?函数接受一个参数,并返回truefalse,如果参数是true,则返回true,否则返回false。

(true? true) ; 返回 true
(true? false) ; 返回 false

(def x 10)
(true? x) ; 返回 true,因为 x 的值不是 nil 或 false

(def y nil)
(true? y) ; 返回 false,因为 y 的值是 nil

注意:true?函数只能判断参数是否为true,不能判断其他值是否为真,比如非空字符串或非零数字。如果需要判断其他值是否为真,可以使用not函数或some函数来进行判断。

3.用seq判断用户的多个传值是否为空

在Clojure中,你可以使用seq函数来判断多个值是否为空。seq函数可以将集合转化为一个序列(sequence),如果集合为空,则返回nil,否则返回非空的序列

(defn my-func [x y z]
  (if (seq [x y z])
    (do
      (println "调用方法的函数"))
    (println "传值为空,请提供有效的参数")))

(my-func "a" "b" "c") ; 输出:调用方法的函数
(my-func "a" "" "c") ; 输出:传值为空,请提供有效的参数

注意:seq函数只能判断集合是否为空

4.校验循环判断值是否为空

(defn process-values [values]
  (if (empty? values)
    (println "所有值都已处理完毕")
    (let [first-value (first values)]
      (if (empty? first-value)
        (do
          (println "值为空,请提供有效的参数")
          (recur (rest values)))
        (do
          (println "处理值:" first-value)
          (recur (rest values))))))

(process-values ["a" "b" "c"]) ; 输出:处理值: a,处理值: b,处理值: c,所有值都已处理完毕
(process-values ["a" "" "c"]) ; 输出:处理值: a,值为空,请提供有效的参数,处理值: c,所有值都已处理完毕

在上面的例子中,process-values函数接受一个名为values的参数,该参数是一个包含多个值的集合(比如向量)。函数首先检查values是否为空,如果为空,则输出提示信息"所有值都已处理完毕"。否则,使用first函数获取values中的第一个值,并判断是否为空。如果为空,则输出提示信息"值为空,请提供有效的参数",并使用recur函数递归地调用process-values函数来处理下一个值。如果不为空,则输出"处理值:"加上当前值,并使用recur函数递归地调用process-values函数来处理下一个值。

5.取反操作

使用not函数对布尔值进行取反操作。

(defn negate-value [value]
  (if (not value)
    (println "值为真")
    (println "值为假")))

(negate-value true) ; 输出:值为假
(negate-value false) ; 输出:值为真

negate-value函数接受一个名为value的参数,并使用not函数对value进行取反操作。如果value为真,则输出"值为假",否则输出"值为真"

6.查找map中某个键是否存在

使用contains?函数来检查一个关联数组(map)中是否存在指定的键

;;(contains? map key)
(def my-map {:a 1 :b 2 :c 3})

(if (contains? my-map :a)
  (println "Key :a exists in the map")
  (println "Key :a does not exist in the map"))

(if (contains? my-map :d)
  (println "Key :d exists in the map")
  (println "Key :d does not exist in the map"))

创建了一个关联数组my-map,其中包含了键:a、:b和:c。然后,我们使用contains?函数来检查my-map中是否存在键:a和:d

7.doall的方法使用

doall函数用于强制求值并消费一个序列(sequence)。它的作用是确保对序列中的每个元素进行求值,即使你不使用或忽略了序列的结果
doall函数的使用方式如下:

(doall coll)

coll是要求值的序列。

(def my-seq (range 10)) ; 创建一个序列

(def result (doall (map inc my-seq))) ; 对序列中的每个元素加1,并使用doall强制求值

(println result) ; 打印结果

在上面的例子中,我们创建了一个序列my-seq,包含了0到9这些元素。然后,我们使用map函数和inc函数对序列中的每个元素加1。但是,由于map是惰性求值的,它不会立即对序列求值。为了确保所有元素都被求值,我们使用doall函数将其结果存储在result中。最后,我们打印出result的值。

请注意,doall函数会强制求值整个序列,这可能会导致性能问题,特别是当序列非常大时。因此,只有在你确实需要对整个序列进行求值时才使用doall函数

8.获取到的全部信息写入粘贴板

js/document.execCommand方法

(defn write-to-clipboard [text]
  (let [temp-textarea (.createElement js/document "textarea")]
    (.setAttribute temp-textarea "readonly" "")
    (set! (.-value temp-textarea) text)
    (.appendChild js/document.body temp-textarea)
    (.select temp-textarea)
    (.execCommand js/document "copy")
    (.removeChild js/document.body temp-textarea)))

;; 调用示例
(write-to-clipboard "这是要写入粘贴板的信息")

你可能感兴趣的:(clojurejs,开发语言)