【发布时间】:2011-01-27 12:01:15
【问题描述】:
我正在尝试创建一个我以前使用 python 编写过的表(工作时间表),我认为这对我来说是对 Clojure 语言的一个很好的介绍。
我在 Clojure(或 lisp 方面)方面的经验很少,而且我在 google 中进行了几轮测试,并进行了大量的试验和错误,但似乎无法理解这种编码风格。
这是我的示例数据(将来将来自 sqlite 数据库):
(def smpl2 (ref {"Salaried"
[{"John Doe" ["12:00-20:00" nil nil nil "11:00-19:00"]}
{"Mary Jane" [nil "12:00-20:00" nil nil nil "11:00-19:00"]}]
"Shift Manager"
[{"Peter Simpson" ["12:00-20:00" nil nil nil "11:00-19:00"]}
{"Joe Jones" [nil "12:00-20:00" nil nil nil "11:00-19:00"]}]
"Other"
[{"Super Man" ["07:00-16:00" "07:00-16:00" "07:00-16:00"
"07:00-16:00" "07:00-16:00"]}]}))
我最初使用 for 尝试逐步完成,然后转到 doseq 最后是 domap(这似乎更成功)并转储内容到 html 表中(我最初的 python 程序使用 COM 将它从 sqlite 数据库输出到 excel 电子表格中)。
这是我的尝试(create-table fn):
(defn html-doc [title & body]
(html (doctype "xhtml/transitional")
[:html [:head [:title title]] [:body body]]))
(defn create-table []
[:h1 "Schedule"]
[:hr]
[:table (:style "border: 0; width: 90%")
[:th "Name"][:th "Mon"][:th "Tue"][:th "Wed"]
[:th "Thur"][:th "Fri"][:th "Sat"][:th "Sun"]
[:tr
(domap [ct @smpl2]
[:tr [:td (key ct)]
(domap [cl (val ct)]
(domap [c cl]
[:tr [:td (key c)]]))])
]])
(defroutes tstr
(GET "/" ((html-doc "Sample" create-table)))
(ANY "*" 404))
输出带有部分(受薪、经理等)和部分名称的表格,我只是觉得我通过嵌套太多次来滥用 domap,因为我可能需要添加更多的 domap只是为了在适当的列中获得轮班时间,并且代码给人一种“肮脏”的感觉。
如果我没有提供足够的信息,我提前道歉,我通常不会寻求编码方面的帮助,这也是我的第一个 SO 问题 :)。
如果您知道任何更好的方法来做到这一点,甚至是我作为新手应该知道的提示或技巧,他们绝对是受欢迎的。
谢谢。
【问题讨论】:
-
对于未来,您不应该像这个社区维基一样标记可回答的问题。这破坏了我们的声誉收集游戏。 ;-)
-
对不起,我没有意识到它抛弃了代表系统。我只是认为这意味着我的问题是可编辑的(无论如何都不需要):(。但是无论如何都感谢您的回答,我从您的帖子中学到了很多东西。:)
-
感谢您的帮助。我已经让它正确显示数据,我只是还没有决定如何从 SQL 数据库(比如我的 python 版本)创建那个凌乱的哈希映射,或者使用另一种方法,比如 nosql(我没有经验)...我应该在这里问,还是开始另一个问题?