我可能缺少一些非常简单的东西,但是让一个字符串进入多行会有什么问题?
例如,Ruby是:
text = <<END
Some
text
END
Python就是:
text = """
Some
text
"""
而C#是:
string text = @"
Some
Text";
哪个更接近,但仍然需要@角色。
使用这样的单行有什么问题:
text = "
Some
text
"
我认为在这种情况下,字符串文字可以结束,其中(“)单独出现,这样,如果在路上找到引号,它们将被忽略。
text = "
He said "This is cool"
But it wasn't , until "
" //<-- quote mark alone
有什么理由可以避免在许多编程语言中使用单引号多行字符串文字,即Java,JavaScript,C#,C ++,C,Ruby,Python?
答案 0 :(得分:3)
首先,解析是一个恐怖 - 取决于语法的其余部分是多么简单,这个单一的“便利特征”可能会使前端数量级变得更加复杂。有关详细信息,请参阅dierre的答案。
另一个原因是这样的语法可能很危险 - 忘记一个关闭引用,你有一个巨大的字符串和一个小得多的程序;)
第三, 经常不需要多行字符串(特别是在连接多个行(如C和Python)中连接相邻文字字符串的语言中)。与上述缺点相比,它只是没有回报。
答案 1 :(得分:2)
我能想到所需特定语法的唯一原因是因为您不必担心转义字符。我不确定这是什么原因,但这肯定是这种语法的一个优点。
当您必须定义语法时,最后一个示例有点问题,因为您使用单个标记"
来执行多个操作并且使用标准LALR(1)并不容易,您需要更多输入中的标记,用于预测正确使用的规则。
有关LALR parser的更多信息。
答案 2 :(得分:0)
我怀疑其中一部分是试图允许合适的格式化。
在C或C ++中,你总是可以将一个长字符串写成一个长字符串,但这会向右延伸,如果它包裹起来就会变得很难看。允许将其拆分使得更容易保持程序的格式保持不变。通常,C和C ++程序不会大量使用多行字符串,因此可以更改语言以使其更方便。
通常有用的是在字符串中明确显示行尾等,并允许它保持周围程序的格式。能够按照您希望的方式编写文字字符串有时也很有用,Ruby,Python和C#示例显示了以您希望的方式编写文字多行字符串的方法。
您的建议侵入格式化,就像Ruby和Python示例一样,并且看起来不是更好的解决方案。将这些字符串与普通字符串混淆是太容易了,而Ruby和Perl HERE文档以及Python三重引用显示了这些字符串的确切内容。