是:参考和:同时使用?

时间:2017-05-10 14:13:49

标签: clojure namespaces alias clojurescript

当我阅读Clojure代码(比如来自GitHub上的各个项目)时,我不太了解这些内容:在:require表达式中,当你只是:as时,你是否应该使用:refer使用您使用(ns example.core (:require [cats.core] [cats.monad.maybe :as maybe])) 引用的功能?此外,我不太确定Clojure和ClojureScript之间是否存在任何差异,也不存在任何惯例。

例如(我正在使用猫库作为示例,但这只是一个示例)如果我这样做:

REPL> (cats.core/mappend (maybe/just 1))
来自,例如,REPL,我可以这样做:

(ns example.core
  (:require
     [cats.core :as m]
     [cats.monad.maybe :as maybe]))

REPL> (m/mappend (maybe/just 1))

但它不是很方便,所以我可以这样做:

mappend

如果我一直使用(ns example.core (:require [cats.core :refer [mappend]] [cats.monad.maybe :as maybe])) REPL> (mappend (maybe/just 1)) (和其他一些人),我可以这样做:

:as

所以我的问题是:使用:refer(ns example.core (:require [cats.core :as m :refer [mappend]] ; does this make any sense? [cats.monad.maybe :as maybe])) 是否有用,如下例所示?

mappend

据我所知,我可能一直在使用mappend,并且可能希望直接将其称为bind,但:refer不是经常使用cats.core/bind但是经常足以写m/bind不方便,所以我会使用:as

那么有什么规则吗?就像你使用:refer一样,你不应该使用has_many :survey_group_lists, -> { order 'sequence ASC, group_id ASC' } has_many :groups, through: :survey_group_lists ,反之亦然?或者你应该总是同时使用它们?

ClojureScript怎么样,它是否以完全相同的方式工作?

1 个答案:

答案 0 :(得分:7)

你对用例很正确;你经常使用的东西,你可能想直接:refer,否则,只需使用:as别名来访问它。两者都没有问题。

我个人倾向于选择:as,除非它非常清楚:refer ed函数来自哪个命名空间(例如,我会认为>!!没有前缀,但是找到{ {1}}更具可读性。)

最广泛使用的样式指南afaik建议结合使用它们很好,但在大多数情况下更喜欢m/bind:ashttps://github.com/bbatsov/clojure-style-guide#comprehensive-ns-declaration

:refer中的:refer:as的Clojurescript应完全相同。