【问题标题】:What does the @ (at sign) mean in Clojure?Clojure 中的 @(at 符号)是什么意思?
【发布时间】:2014-07-07 21:35:17
【问题描述】:

我找到了这行 Clojure 代码:@(d/transact conn schema-tx)。这是一个创建数据库模式的 Datomic 语句。由于难以搜索“@”等字符,我在 Google 上找不到任何相关内容。

第一个括号前的“at”符号是什么意思?

【问题讨论】:

  • 这里有一篇关于 clojure 的 'ungoogleable' 字符的不错的博客文章 - 其中有一些! yobriefca.se/blog/2014/05/19/…
  • 很好发现!不错。

标签: clojure datomic


【解决方案1】:

这是 deref 宏字符。您在 Datomic 上下文中寻找的内容位于:

http://docs.datomic.com/transactions.html

处理交易下:

在 Clojure 中,还可以使用 deref 方法或 @ 来获取 交易结果。

有关 Clojure 中 deref 的更多信息,请参阅:

http://clojuredocs.org/clojure_core/clojure.core/deref

【讨论】:

    【解决方案2】:

    这里是 Clojure 默认语法和“糖”(即宏定义)的有用概述。

    http://java.ociweb.com/mark/clojure/article.html#Overview

    您会发现数字符号# 表示正则表达式或哈希映射,插入符号^ 表示元数据,还有更多“at 符号”@。它是取消引用的一种糖形式,这意味着您可以获得引用所指向的实际值。

    Clojure 具有三种引用类型:Refs、Atoms 和 Agents。

    http://clojure-doc.org/articles/language/concurrency_and_parallelism.html#clojure-reference-types

    您的术语@(d/transact conn schema-tx) 似乎传递了对原子的引用,并且通过@ 符号您延迟并因此获得该引用指向的值。

    顺便说一句,如果你看一下,你会在搜索引擎中找到结果。对于“Clojure at sign”。但这需要一些耐心;-)

    【讨论】:

    • 一个比较好的方法是在一个单独的html页面上寻找Clojure tut,然后ctrl-f用浏览器搜索页面内容,输入@。这也带来了一些结果。 (就像附录一样,有时很难找到标志。)
    • 一个小问题:# 是通用的 reader-macro 前缀,大多数 reader evaluator 以 # 开头,包括集合、匿名函数、正则表达式、时间戳和任何用户定义的记录。 # 从不引入哈希映射,#{} 是集合文字的表示法。
    【解决方案3】:

    @ 相当于 Clojure 中的 deref。交易返回一个未来,您可以将其取消以获取结果。 deref/@ 将阻塞直到事务完成/中止/超时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2010-09-29
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多