我正在编写代码来生成我的 selfhost 播客的 rss 提要,我需要一个函数来根据播客项目的文件扩展名返回类型。
例如,如果播客文件(项目)的扩展名是
mp4
,我需要返回字符串video/mp4
。这是生成标签 <enclosure>
所必需的,如播客 RSS 指南中所述。
这个问题可以通过条件枚举函数来解决。例如,
(defun podcast-return-type (ext)
"return type string for item file extension"
(cond
((string= ext "m4a") (identity "audio/x-m4a"))
((string= ext "mp4") (identity "video/mp4"))
((string= ext "mp3") (identity "audio/mpeg"))
((string= ext "mov") (identity "video/quicktime"))
((string= ext "m4v") (identity "video/x-m4v"))
((string= ext "pdf") (identity "application/pdf"))
(t (identity "not applyed"))))
但我想通过财产清单来解决它。我遇到了一个问题:如果密钥存储在变量中,我无法获取值。
(setq podcast-list '(mp4 "video/mp4" mp3 "audio/mpeg" pdf "application/pdf")) ;; key value
(setq ext (file-name-extension "~/podcast/podcast-item.mp4")) ---> "mp4"
(plist-get podcast-list ext) ----> nil
(plist-get podcast-list 'mp4) ----> "video/x-m4v"
如果键位于变量中,如何获取 plist 的值?或者有更优雅的方法来解决这个问题吗?我觉得解决方案就在表面上的某个地方,但我被困住了。
那是因为你的键是
symbols
并且 ext
的值是 string
。它们是完全不同的类型,因此它们永远不会匹配。
您可以通过 intern
将字符串转换为符号:
(plist-get podcast-list (intern ext))
"video/mp4"