sdr*_*eam 3 clojure lazy-sequences
我正在玩机智/小鸭图书馆.它是用clojure编写的,我以前没有clojure的经验.通过遵循其文档,我得到一个变量的值
({:dim :time, :body "20 minutes from now", :value {:type "value", :value "2016-08-03T10:50:56.000+05:30", :grain :second, :values ({:type "value", :value "2016-08-03T10:50:56.000+05:30", :grain :second})}, :start 21, :end 40})
Run Code Online (Sandbox Code Playgroud)
做了一些谷歌搜索后,我才知道,这是clojure.lang.LazySeq并开始用冒号记号(:)的关键字,而不是钥匙.我想访问value :values关键字的值,我也读过关于clojure的基础知识,但是无法访问value :values关键字的值.我希望必须有一种方法,通过写lazy_seq [:values],我得到它的价值.任何人都可以帮忙吗?
试试这个:
> (use 'clojure.pprint)
> (def stuff '({:dim :time, :body "20 minutes from now", :value {:type "value", :value "2016-08-03T10:50:56.000+05:30", :grain :second, :values ({:type "value", :value "2016-08-03T10:50:56.000+05:30", :grain :second})}, :start 21, :end 40}))
Run Code Online (Sandbox Code Playgroud)
我们使用"pretty print"函数pprint为数据结构获得一个很好的嵌套输出:
> (pprint stuff)
({:dim :time,
:body "20 minutes from now",
:value
{:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second,
:values
({:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second})},
:start 21,
:end 40})
Run Code Online (Sandbox Code Playgroud)
所以我们有一个项目列表,它是键的映射:dim:body:value:start和:end.:value键的值是另一个键映射:type,:value,:grain,:values.
所以,要解开这个,
(pprint (first stuff))
{:dim :time,
:body "20 minutes from now",
:value
{:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second,
:values
({:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second})},
:start 21,
:end 40}
> (pprint (:value (first stuff)))
{:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second,
:values
({:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second})}
> (pprint (:values (:value (first stuff))))
({:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second})
Run Code Online (Sandbox Code Playgroud)
您还可以使用线程优先宏->,如下所示:
> (pprint (-> stuff first :value :values))
({:type "value",
:value "2016-08-03T10:50:56.000+05:30",
:grain :second})
Run Code Online (Sandbox Code Playgroud)
使原来的嵌套结构stuff 流过的功能first,:value和:values(按该顺序).
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |