You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过变量获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:40:07