【问题标题】:Does any programming language assign meaning to trailing spaces?是否有任何编程语言为尾随空格分配含义?
【发布时间】:2020-06-16 12:52:07
【问题描述】:

有许多编程语言(例如 Python 和 F#)为前导空格分配语义含义,因此如果一行代码删除了前导空格,它可能会破坏整个程序。

但是尾随空格呢?

是否有任何编程语言为行尾的空格分配语义含义,就在换行符或回车符之前?

(假设我排除的语言不是而是空格,例如Whitespace。)

【问题讨论】:

  • 只有 37 位用户观看空白标签,我怀疑你永远不会得到答案......
  • 在 C++ 中有些地方它很重要,例如在多行引用的字符串中。

标签: whitespace


【解决方案1】:

T-SQL 是一种在标识符和多行字符串中对尾随空格敏感的语言,并且仍在许多企业应用程序中使用

-- Warning: horrifying, don't ever do this
CREATE TABLE [Table   
Name](
    [My 
        field] INT
);
SELECT * FROM [Table   
Name]; --Works;

SELECT [My 
        field] FROM [Table   
Name]; --Works

SELECT [My
        field] FROM [Table   
Name]; --Fails, lacks trailing space in field name

SELECT [My 
        field] FROM [Table  
Name]; --Fails, too few trailing spaces in table name

【讨论】:

  • 标识符可以换行这一事实让我害怕
【解决方案2】:

Markdown 会特别处理一些尾随空格。当一行以两个或多个空格结尾时,将插入一个换行符<br> 来分隔一个段落。

此规则并不为人所知,因此它可能会被无意触发,并且某些 linter 默认不允许它 (MD009 no-trailing-spaces):

在任何以意外空格结尾的行上都会触发此规则。要解决此问题,请删除行尾的尾随空格。

注意:缩进和围栏代码块中允许使用尾随空格,因为某些语言需要它。

br_spaces 参数允许特定数量的尾随空格例外,通常用于插入显式换行符。默认值允许 2 个空格表示硬中断(<br> 元素)。

注意:您必须将br_spaces 设置为>= 2 才能使此参数生效。将br_spaces 设置为 1 的行为与 0 相同,不允许任何尾随空格。

例如,这些markdown段落(中间的点代表空格):

Three···
trailing spaces

Two··
trailing spaces

One·
trailing space

No
trailing spaces

A··
mix
of··
spacing··

这样渲染:

三个
尾随空格

两个
尾随空格

一个 尾随空格

没有 尾随空格

一个
混合 的
间距

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多