• Clojure学习之比线性箭头操作


    1. 单箭头( -> )

      单箭头操作符会把其参数form迭代式地依次插入到相邻的下个一个form中作为该form的第一个参数。这就好像把这些form串起来了,即线性化(Threading)。 由于它总是把前一个参数作为接下来的form的第一个参数插入,这种操作也叫 thread-first 。注意,如果在->的参数序列中存在非form的元素,则->会先把它转化成一个form,然后再把它们串起来,这对下面提到的双箭头操作符也是适用的,比如下面三行代码就是等价的:它们得到的结果都是,(5 4 2 3),请注意前两行对rest使用上的不同。

    1 (-> [1 2 3] rest (conj 4 5))
    2 (-> [1 2 3] (rest)(conj 4 5))
    3 (conj (rest [1 2 3]) 4 5)

      其中第一行代码由->操作符串起了[1 2 3]rest(conj 4 5)三个参数。其中第一个为一 vector 数据,第二个为一函数,第三个为一个简单的form。

    2. 双箭头( ->> )

      双箭头操作符与单箭头操作符类似,不过它是把前一个参数form做为最后一个参数插入到接下来的form中的,所以它又叫 thread-last,示例1

    user=> (->> (range)
                (map #(* % %))
                (filter even?)
                (take 10)
                (reduce +))
    1140
    
    ;; This expands to:
    user=> (reduce +
                   (take 10
                         (filter even?
                                 (map #(* % %)
                                      (range)))))
    1140

     示例2:-> 和 ->> 对比

    1 (->> "hello" (str " jmd"))
    2 " jmdhello"
    3 user=> (-> "hello" (str " jmd"))
    4 => "hello jmd"
  • 相关阅读:
    jquery.cookie中的操作
    tooltip 鼠标移动上去出现图片或文字与title大同小异
    jQuery.Autocomplete实现自动完成功能-搜索提示功能
    C#WinForm中复制、粘贴文本到剪贴板
    SQL索引一步到位
    冒泡排序与选择排序
    插入排序(直接插入、折半、Shell)
    .netLinq动态Where条件
    C#多态
    C#面向对象
  • 原文地址:https://www.cnblogs.com/sunfie/p/7400293.html
Copyright © 2020-2023  润新知