如何通过变量获取plist对应值?自托管播客RSS开发问题
解决Emacs Lisp中通过变量获取plist值的问题
问题核心原因
file-name-extension返回的是字符串类型的"mp4",而你的plist里的键是符号类型的mp4。Emacs Lisp的plist-get对键的类型匹配是严格的,用字符串去匹配符号键自然返回nil。
直接解决:转换变量类型
只需把字符串类型的扩展名转换为符号,使用intern函数即可:
(setq podcast-list '(mp4 "video/mp4" mp3 "audio/mpeg" pdf "application/pdf")) (setq ext (file-name-extension "~/podcast/podcast-item.mp4")) ; 返回 "mp4" (plist-get podcast-list (intern ext)) ; 正确返回 "video/mp4"
更优雅的替代方案
方案1:使用哈希表
哈希表支持直接用字符串作为键,无需类型转换,代码更直观,查询效率也更高(适合映射项较多的场景):
;; 创建并初始化哈希表 (setq podcast-mime-map (make-hash-table :test 'equal)) (puthash "mp4" "video/mp4" podcast-mime-map) (puthash "mp3" "audio/mpeg" podcast-mime-map) (puthash "pdf" "application/pdf" podcast-mime-map) ;; 查询MIME类型 (setq ext (file-name-extension "~/podcast/podcast-item.mp4")) (gethash ext podcast-mime-map) ; 返回 "video/mp4"
方案2:利用内置函数
Emacs内置了mime-type-from-extension函数,能自动返回标准MIME类型,无需手动维护映射表:
(mime-type-from-extension "mp4") ; 返回 "video/mp4" (mime-type-from-extension "mp3") ; 返回 "audio/mpeg"
这个函数覆盖了绝大多数常见文件类型,完全适配播客RSS生成中<enclosure>标签的MIME类型需求。
内容的提问来源于stack exchange,提问作者n0n
相关产品推荐
相关产品推荐

