0

考虑以下情况

(setf mat (list :f1 1 :f2 2))

(getf mat :f1)1按预期 输出 。

我有一个变量(setf str "f1") or (setf str 'f1),无论哪个有效。我希望能够做类似的事情

(getf mat :str)

我怎样才能做到这一点?

4

1 回答 1

2

这样做并不是一个好主意,考虑使用哈希表,如果你想使用字符串作为键,或者在你的变量中存储关键字。如果您确实需要这样做,您可以将您的字符串转换为关键字,然后查找一个字段。对于字符串到符号的转换,我们使用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 。

于 2014-10-25T16:20:57.880 回答