首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克洛尔的尖刻引语?

克洛尔的尖刻引语?
EN

Stack Overflow用户
提问于 2020-02-12 12:05:42
回答 1查看 198关注 0票数 1

我们知道Clojure是一个Lisp-1,也就是说,没有单独的函数和变量名称空间。

我是从Common (这是Lisp-2)的角度来讨论这个问题的。

我试图理解元数据,并对以下内容感到困惑:

代码语言:javascript
复制
user=> (def ^Integer my 3)
#'user/my
user=> (meta my)
nil
user=> (meta #'my)
{:tag java.lang.Integer, :line 1, :column 1, :file "NO_SOURCE_FILE", :name my, :ns #object[clojure.lang.Namespace 0x1d5a857d "user"]}

user=> (def myatom (atom (for [x [1 2 3]] ^{:key 'foo} x)))
#'user/myatom
user=> @myatom
(1 2 3)
user=> (first @myatom)
1
user=> (meta (first @myatom))
nil
user=> (meta #'(first @myatom))

RuntimeException EOF while reading, starting at line 1  clojure.lang.Util.runtimeException (Util.java:221)

RuntimeException Unmatched delimiter: )  clojure.lang.Util.runtimeException (Util.java:221)

#'在Clojure中的尖锐引语扮演了什么角色?

另外,关于元数据,我对以下内容感到有点困惑:

代码语言:javascript
复制
Children: [:ul [:li] [:li] [:li] [:li]]
Keyed: [:ul [^3[:li] ^4[:li] ^5[:li] ^6[:li]]]

这是来自本刊/试剂一章的书中的专业克洛尔。第二行是普通Clojure元数据语法,还是仅作为试剂宏的结果才有效?

更多的实验是:

代码语言:javascript
复制
user=> ^1[2]
IllegalArgumentException Metadata must be Symbol,Keyword,String or Map  clojure.lang.LispReader$MetaReader.invoke (LispReader.java:798)
user=> ^:a[1]
[2][1]
user=> ^:a[1]
[1]
user=> (meta ^:a[1])
{:a true}
user=> 

第二行看上去很奇怪,但如果不起作用的话,也许在第一种情况下就无所谓了。

EN

回答 1

Stack Overflow用户

发布于 2020-02-12 12:28:34

使用像#'my这样的尖利引号是编写(var my)的缩写。

var返回符号my指向的Var对象。请注意,var是Clojure的一个特殊形式,它的行为不像常规函数调用。

请参阅此问题,以获取Clojure:什么时候使用Var而不是函数?中有关符号、var和值的详细信息。

另请参阅:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60187961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档