代码之家  ›  专栏  ›  技术社区  ›  prosseek

Clojure问题的连接函数

  •  1
  • prosseek  · 技术社区  · 14 年前

    conj用于(conj coll item),例如(conj“stu”)。

    但是,我在“编程Clojure”的第16页找到了这个例子。

    (alter visitors conj username)
    

    我想(conj-visitors用户名)应该是正确的用法。秘密是什么?

    2 回复  |  直到 14 年前
        1
  •  5
  •   mikera    14 年前

    “秘密”是alter是一个特殊的函数,在一个引用的事务中被调用,它的作用是将引用的当前值作为第一个参数插入到作为第二个参数提供的函数中。

    实际上,与ref连用的正常用法是:

    (conj @visitors username)
    

    因此,alter大致翻译如下:

    (alter vistors conj username)
    => (ref-set visitors (conj @visitors username))
    
        2
  •  2
  •   Rafał Dowgird    14 年前

    对于宏和高阶函数来说,在Clojure中,获取一个后跟args的函数,然后在提供的args之前插入一个上下文相关的参数来执行它是很常见的。这让打电话的人的生活更轻松。这样你就可以写:

    (alter visitors conj username)
    

    而不是:

    (alter visitors #(conj %1 username))
    

    执行此操作的其他一些形式包括: send , doto , update-in , -> , alter-meta! .