1

我想编写一个可以为“故事”创建结构的 clojure 程序。例如,我希望能够“添加故事”,这将创建一个具有角色和事件字段的新故事,而“添加字符”将向给定故事添加具有属性字段的新角色。

我希望能够创建和填写一个“故事”,然后能够退出并稍后返回以找到与我离开时相同状态的故事。我需要编写一个连续运行的程序吗?我如何存储诸如故事/事件/角色之类的数据,以便以后可以使用它们?

4

1 回答 1

3

在此项目中获得 Clojure 生态系统优势的一种方法是将您的故事表示为地图:

{:title "Allice's adventures in Clojure Land"
 :characters []}

然后当它发生变化时,将其写入文件、数据库、Amazon-s3-bucket、Dropbox 等。基本上任何能记住位的东西都可以,因为 Clojure 结构既可打印又可读,因此内置了序列化和解析。

然后添加一个字符看起来像:

(update-in story [:characters] conj {:name "Allice"})
{:title "Allice's adventures in Clojure Land", :characters [{:name "Allice"}]} 

然后将该字符串写入您的数据存储以供以后检索。这背后的想法是将数据与存储分开,并更新流程,以便每个流程都尽可能简单。

保存 clojure 核心数据结构的最简单(最熟悉的)方法是:

core> (spit "save.edn" (pr-str {:title "Allice's adventures in Clojure Land", 
                                :characters [{:name "Allice"}]})) 
nil
core> (read-string (slurp "save.edn"))
{:title "Allice's adventures in Clojure Land", :characters [{:name "Allice"}]} 

虽然这只适用于最简单的程序。在许多情况下,您将需要更复杂的东西,例如数据库或对象存储 (S3)。Clojure 的数据格式称为可扩展数据表示法或 EDN,因此扩展名为 .edn

于 2013-08-13T19:31:59.423 回答