我见过以下代码here
(def token-store
(redis-store/->RedisTokenStore secret-key 30 {:pool {} :spec {:host "127.0.0.1" :port 6379}}))
任何人都可以解释这是什么意思吗?
RedisTokenStore是一个实现TokenStore协议及其方法的记录。 但是这个语法意味着什么,也可以使用这种语法创建对象:
(RedisTokenStore. secret-key 30 {:pool {} :spec {:host "127.0.0.1" :port 6379}})
然后这个符号有什么不同 - >做什么? 为什么它是在用户定义的命名空间之后?
我知道作为一个宏, - >习惯了
(-> 4 (+ 5)
(- 6))
转换为( - (+ 4 5)6)并给出3.但我也不能谷歌' - >'或者输入类似的东西来搜索这意味着什么。
答案 0 :(得分:7)
RedisTokenStore
声明 defrecord
。
给定(defrecord TypeName ...),将定义两个工厂函数: - > TypeName,获取字段的位置参数,以及map-> TypeName,将关键字映射到字段值。
答案 1 :(得分:6)
->RedisTokenStore
是记录RedisTokenStore
的工厂函数。 Clojure在定义记录时自动定义它。
以下是official Clojure datatypes docs的引用:
当deftype / defrecord Foo被定义为相应的函数时 - > Foo被定义为将其参数传递给构造函数(仅版本1.3及更高版本)
因此,->RedisTokenStore
是一个辅助函数,它只调用RedisTokenStore.
构造函数。唯一的区别是,您应import
RedisTokenStore
类明确调用其构造函数,而->RedisTokenStore
是普通函数,可以require
编辑,然后用作其中的一部分redis-store
名称空间。
更新:作为mattexx poined out in his answer,还有map->RedisTokenStore
工厂函数,它将地图作为唯一参数。