这可能看起来很愚蠢,但我如何访问 List 中的元素?
(nth coll index)
例如:
(nth [1 2 3 4] 2) ; -> 3 (since it uses zero-based indexing)
有没有办法创建一个包含“姓名”“地址”“电话号码”变量的类“条目”?还是在clojure(以及一般的函数式编程中)这是不可能的?如果我不能有一个包含该信息的对象列表,我将如何完成这项任务?
这在 Clojure 中是可能的,但不习惯。在 Clojure 中,数据实体的基本抽象是映射,而不是类(除了一些需要与 Java 框架直接互操作的极端情况)。因此,您只需使用地图:
(def entry {:name "x" :address "y" :phone-number "z"})
要访问项目的名称,您可以使用
(:name entry)
或者
(get entry :name)
前者仅在地图的键是关键字时才有效,后者适用于所有类型的键。
因此,对于您的示例,您的数据模型(电话簿)将是此类地图的序列(例如,列表或向量)。
我正在考虑使用一个函数来读取用户输入以了解用户想要做什么(添加条目、删除条目或打印信息),然后调用适当的函数来执行该操作,该函数在完成时回调第一个函数。将条目列表作为参数传递给每个函数是正确的做法吗?
由于您的模型仅包含一个主要数据结构(电话簿序列),因此将其作为 arg 传递无疑是设计函数的合适方法。如果您希望拥有更多种类的顶级容器(即对于更真实的应用程序),我建议您查看Application Context Pattern,它一开始看起来有点吓人(至少它对我来说是这样,并且它包含很多 Clojure 特定的行话),但值得努力学习。