【问题标题】:What should an escape character do if the following character doesn't need escaping?如果后面的字符不需要转义,转义字符应该怎么做?
【发布时间】:2010-10-06 15:53:14
【问题描述】:

我正在处理的应用程序有一个可以输入字符串的字段。

字符串中的特殊字符会导致在评估字符串时插入不同的内容,但这些特殊字符前面可以有一个转义字符(反斜杠),这会导致特殊字符按字面意思输出,而不是其特殊含义。

将其视为类似于正则表达式:. 匹配任何字符,但 \. 匹配点。

当转义字符后面跟着一个不需要转义的字符时,最直观的事情是什么?例如,是否更有意义:

  1. 转义字符“转义”文字本身:\f 变为 f(“转义的 f”)
  2. 除非后面跟着特殊字符,否则转义字符不是转义字符:\f 保持为 \f
  3. 错误!抛出异常,因为转义字符不转义任何内容是无效的

所有这些都是可能的,并且在我看来是合理的。但哪个更有意义,哪个已经在其他语言中最常见?

【问题讨论】:

    标签: language-agnostic escaping


    【解决方案1】:

    我会投票支持第一个解决方案。它使形成字符串变得容易:如果您不知道某个字符在您的上下文中是否具有特殊含义,只需将其转义即可。不会痛的。

    【讨论】:

    • 是的,这个。不要因为不知道角色不需要转义而惩罚某人。
    • 另外,这是大多数语言的惯例。所以这是最值得期待的行为。
    【解决方案2】:

    最终,正确的答案可能与语言无关。在 Ada 中,我期待选项三,因为它主要是关于严格执行严格的规则。在 Perl 中,我希望选择一或二,因为它通常更宽松。

    由于我主要是 C++ 程序员,我会投票支持选项 4:安排在这种情况下调用一个函数。 “错误”序列作为参数传递给它,并且预期返回解释结果或抛出异常。

    如果它是一个原生 Windows API,我希望它会接近 C++ 解决方案,只是它会构建一个函数链,从最近添加的函数开始,沿着链向下工作,直到函数返回一个解释的结果,或者它到达了默认函数会抛出异常的链的末尾。

    【讨论】:

    • 我要补充一点,如果没有找到匹配的功能,windows 版本应该强制用户重新启动;)
    • @Nikolai:对我来说,强制重启听起来更像是 MacOS 的事情。
    猜你喜欢
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多