最妙的一语双关:JavaScript 的模板字面量
来源: shukla.io — 2026-09-26
概述
作者从莎士比亚的双关说到 JavaScript 的标签模板字面量,讲了一个发生在语法层面的双关:${...} 会对其中内容求值,而 JavaScript 的 { name } 对象简写等价于 { name: name },于是 ${ { url } } 在 JavaScript 眼里是表达式,在读者眼里却像极了 Mustache、Handlebars、Jinja2、Django、Liquid、Angular 与 Vue 通用的 { } 模板语法。这个「一个字符串、两种解析」的巧合被用来在提示词里做变量标注,并由 Helicone 的 SDK 正式实现。
核心要点
- 作者把双关定义为「一个字符串、两种解析」,先以《第十二夜》里 fool 与 foolish、witty 与 wit 的词性互换为例。
- 《奥赛罗》的「Put out the light, and then put out the light」第一次指熄灯、第二次指杀人,是靠上下文而非语法制造的双关。
- 字典定义强调双关要产生幽默效果,但作者认为幽默因人而异,于是引出他发现过的最妙的双关——它不在自然语言里。
- 标签模板字面量让 dedent、prompt 这类标签函数分别接收字面量片段与求值后的 ${...} 值,从而对两者做任意加工。
- { } 是 Mustache、Handlebars、Jinja2、Django 模板、Liquid、Angular 与 Vue 中都非常常见的模板语法,因此看起来格外眼熟。
- 妙处在于 ${ { url } } 的花括号完全来自 JavaScript 自身:${...} 负责求值、{ name } 是对象简写,于是 { url } 这种写法是巧合涌现的,只存在于读者脑中。
- 这个点子 2024 年与 Helicone 的 Justin 一起落进 SDK:标签函数把变量标注成 <prompt id="url">…</prompt> 结构,方便可观测性工具分析提示词。
金句
JavaScript 看到的是一回事,你看到的是另一回事。{ url } 这套语法只活在你的脑子里。
👍 0
👎 0
← 返回 Lobsters 首页