考虑以下情况
(setf mat (list :f1 1 :f2 2))
(getf mat :f1)
1
按预期 输出 。
我有一个变量(setf str "f1")
or (setf str 'f1)
,无论哪个有效。我希望能够做类似的事情
(getf mat :str)
我怎样才能做到这一点?
考虑以下情况
(setf mat (list :f1 1 :f2 2))
(getf mat :f1)
1
按预期 输出 。
我有一个变量(setf str "f1")
or (setf str 'f1)
,无论哪个有效。我希望能够做类似的事情
(getf mat :str)
我怎样才能做到这一点?
这样做并不是一个好主意,考虑使用哈希表,如果你想使用字符串作为键,或者在你的变量中存储关键字。如果您确实需要这样做,您可以将您的字符串转换为关键字,然后查找一个字段。对于字符串到符号的转换,我们使用intern
, 使其成为关键字,只需在 package.json 中实习即可:KEYWORD
。
(defparameter *data* (list :f1 1 :f2 2))
;;; Case of string IS important
;;; (intern "f1" :keyword) => :|f1|
;;; (intern "F1" :keyword) => :F1
(getf *data* (intern "F1" :keyword))
;;; => 1
此外,如果您使用他们的代码,您可以使用来自Alexandria library的 make-keyword 。