下面举个例子
(defn simpfy-piece
"throw away the unnessesaries"
[piece]
[(schema/piece-name-id
(b/get-state :piece-name-ids)
(:entity piece)
(:key piece))
(:val piece)])
下面是修改之后的代码。
(defn piece->simple-piece
"throw away the unnessesaries"
[piece-name->id]
(fn [piece]
[(piece-name->id (:entity piece) (:key piece))
(:val piece)] ))
piece->simple-piece
。schema/piece-name-id
这个依赖的方法,通过参数传递进来。(defn query
[clause]
(query/query->entities
(query/vindex->entities
(query/entity-id->entity
(query/entity-id->pieces
(idx/entity-id->kindex ref-kindex)
(store/ids->pieces
(store/id->piece (fn [entity-name id]
(p/get! (b/get-state :pieces-db) id)))))
(query/pieces->entity (sc/piece-name->id
(b/get-state :piece-name-ids)))))
{:piece-name->id (sc/piece-name->id (b/get-state :piece-name-ids))
:piece-name->vindex ref-vindex}))
最后,有没有同学可以分享自己的心得,如何用好functional programming.
如果能分享代码更好。
我上面实现的功能比较简单,piece->simple-piece
是将一个map结构的数据,删除掉不需要的部分,同时将里面key为"name"的值转换成id,所以依赖piece-name->id
,如果各位来实现,是怎么个思路。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.