给定这些散列和Mustache模板:
哈希:
{
'a': 3
}
模板:
"This is a+2: {{a+2}}"
Ruby和Python给我不同的输出:
在ruby中,我得到:
/usr/lib/ruby/gems/3.0.0/gems/mustache-1.1.1/lib/mustache/parser.rb:286:in `error': Unclosed tag (Mustache::Parser::SyntaxError) Line 1 {{a+2}}
在python中,只是空字符串
谁是对的?在官方的mustache规范中我们应该得到什么结果:空字符串或错误(或其他东西)?我不知道其他编程语言的结果是什么。
这两个都没有错,因为它们遵循了Mustache规范的要求(或者在这种情况下缺乏这种要求)。
- 胡子插值规范(v1.2.2)只限制:
标签的内容必须是非空白字符序列当前关闭分隔符。
- Mustache规范没有明确定义标签名称的语法(Mustache/spec#67)。
Ruby实现的mustache/mustache进一步将标签名限制为:
# The content allowed in a tag name.
ALLOWED_CONTENT = /(w|[?!/.-])*/
Python实现noahmorrison/chevron考虑a+2
作为标签名:
import chevron
chevron.render("This is a+2: {{a+2}}", {'a+2': 3})
# 'This is a+2: 3'
值得注意的是,Python实现不会将语法错误默认为空字符串。