小编Jef*_*.D.的帖子

我如何使用`clojure.tools.macro/name-with-attributes`?

我看到什么有望成为clojure.tools.macro库中任何编写defn类宏的工具:该函数.文档字符串说:name-with-attributes

用于宏定义.处理可选的文档字符串和属性映射,以便在宏参数列表中定义名称.如果第一个宏参数是字符串,则将其作为docstring添加到name并从宏参数列表中删除.如果之后第一个宏参数是一个映射,则将其条目添加到名称的元数据映射中,并从宏参数列表中删除映射.返回值是一个向量,包含带有扩展元数据映射的名称和未处理的宏参数列表.

但我似乎找不到在任何地方使用此功能的示例.

那么,我怎样才能使用这个函数来定义一个defn2宏,它应该是一个clojure.core/defn包含所有相同功能的克隆,包括:

  • 文档字符串
  • 属性图
  • 先决条件
  • 多arities

macros clojure

6
推荐指数
1
解决办法
381
查看次数

如何获得当前的Datomic模式?

由于Datomic模式本身存储在Datomic中,如何查询Datomic以获取当前安装的模式?我只想获取用户级别的架构,但不包括具有分区之类的系统级别的架构。

schema datomic

5
推荐指数
1
解决办法
1242
查看次数

这个clojure.core.typed类型错误是什么意思?

我想得到clojure.core.typed类型检查传递,但我得到一个我不明白的类型错误.

我的问题是:

  • 下面的错误是什么意思?
  • 我该如何解决?

这是我的代码(我意识到这是不正确的):

(ns clj.util.map
  (:require [clojure.core.typed :as t]))

(t/ann map-vals
       (All [k v1 v2]
            (Fn [ (Fn [(t/Option v1) -> (t/Option v2)])
                  (t/Option (t/Map k v1)) ->
                  (t/Option (t/Map k v2)) ])))

(defn map-vals
  ;; FIXME: Incorrect code
  "Apply a function to each of the values in a map, returning the updated map."
  [f hm]
  (t/doseq> [k :- Any (keys hm)]
            (assoc hm k (f (get hm k)))))
Run Code Online (Sandbox Code Playgroud)

这是输出lein typed check clj.util.map:

Initializing …
Run Code Online (Sandbox Code Playgroud)

types clojure clojure-core.typed

4
推荐指数
1
解决办法
722
查看次数

为什么使用文字字符构建Clojure字符串?

我刚才正在阅读一些代码,我跑过这一行:

(str cache \, \space lru \, \space tick \, \space limit)
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪.使用连续的文字字符,而不是包含这些字符的字符串.我希望更像这样的东西:

(str cache ", " lru ", " tick ", " limit)
Run Code Online (Sandbox Code Playgroud)

但这是由一些古老的Clojure老兵写的核心库,这让我觉得可能有一个原因.什么原因?性能?或者是什么?

clojure rationale

4
推荐指数
1
解决办法
91
查看次数

每个控制器操作切换Devise身份验证模块

我有一个使用Devise进行身份验证的Rails站点.我有一个页面(PhotosController#create)需要在没有cookie的情况下对用户进行身份验证.我正在使用:token_authenticatableDevise模块执行此操作,如果提供的令牌与存储在服务器端的令牌匹配,则会对用户进行身份验证.(如果你很好奇,请参阅这个问题.)

在操作完成后过期或更改令牌是一个很好的策略.这可以防止攻击者嗅探令牌并使用它成功地作为用户进行身份验证.但是,在我的情况下,我无法过期或更改令牌,因为客户端照片上传器上传了多张照片,每张照片都会导致单独的POST PhotosController#create.因此,如果我在成功创建后使令牌过期,则第二次,第三次等上传将失败.

设计模块在模型级别指定(例如User模型).我需要更多的粒度.

我的问题是,如何仅为单个控制器的单个操作启用:token_authenticatable模块?或者,等效地,如何禁用一个操作之外的所有控制器和操作的模块?:token_authenticatable

authentication ruby-on-rails devise

3
推荐指数
1
解决办法
3510
查看次数

如何仅列出给定 CloudFormation 堆栈中的 EC2 实例?

我可以$QUERY在满足以下条件的命令中使用什么:

aws ec2 describe-instances --query $QUERY
Run Code Online (Sandbox Code Playgroud)
  1. 只打印aws:cloudformation:stack-name标签等于 的实例test-stack
  2. 只打印InstanceId每个实例的属性。
  3. 不诉诸管道、for循环或其他外壳幻想。

amazon-ec2 amazon-web-services aws-cloudformation aws-cli

3
推荐指数
1
解决办法
2674
查看次数

Datomic异常`read-transactor-location-failed`是什么意思?

删除或创建Datomic数据库时(使用Datomic Pro 0.9.4899),我收到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: :db.error/read-transactor-location-failed Could not read transactor location from storage at datomic.error$arg.invoke(error.clj:55) at datomic.coordination$check_peer_version.invoke(coordination.clj:138) at datomic.coordination$lookup_compatible_transactor_endpoint.invoke(coordination.clj:149) at datomic.peer$send_admin_request$fn__8594.invoke(peer.clj:713) at datomic.peer$send_admin_request.invoke(peer.clj:707) at datomic.peer$delete_database.invoke(peer.clj:745) at clojure.lang.Var.invoke(Var.java:379) at datomic.Peer.deleteDatabase(Peer.java:142) at datomic.api$delete_database.invoke(api.clj:23) ...

这个例外是什么意思?它可能出现的常见原因是什么?

exception datomic

3
推荐指数
1
解决办法
473
查看次数