在我对a Code Review.SE question的回答中,我建议OP可以考虑使用记录来表示棋子。由于片记录都将是一样的,除了名字,我想我可以以编程方式生成它们,就像这样:如何以编程方式生成记录定义?
(map #(defrecord % [color])
["Rook" "Pawn" "Queen" "King" "Knight" "Bishop"])
之类的工作,但我的记录名称不是那块名称;他们是随机gensyms:而不是user.Rook
我得到。如果我做了(p1__910. :black)
,它确实有用并创造了一个记录,但你可能会明白为什么我对此不满意。
我也尝试以下两种变化:
(map #(defrecord % [color])
['Rook 'Pawn 'Queen 'King 'Knight 'Bishop])
;; Same result as above.
(map #(defrecord (symbol %) [color])
["Rook" "Knight" "Pawn" "Queen" "King" "Bishop"])
;; CompilerException java.lang.ClassCastException: clojure.lang.PersistentList
;; cannot be cast to clojure.lang.Symbol, compiling:(NO_SOURCE_PATH:1:7)
这有什么错我的做法?我如何从一个名称列表中生成一堆相同的记录?这甚至有可能吗?
我与宏无能又咬我。谢谢你的回答。 – tsleyson