1

可能是我错过的一些非常简单的事情,但是将字符串放在多行中有什么问题?

例如,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?

4

3 回答 3

3

首先,解析起来很可怕——取决于语法的其余部分有多简单,这个单一的“便利功能”可能会使前端数量级更加复杂。有关详细信息,请参阅 dierre 的答案。

另一个原因是这样的语法可能很危险——忘记一个闭引号,你就会得到一个巨大的字符串和一个小得多的程序;)

第三,通常不需要多行字符串(尤其是在连接相邻文字字符串的语言中,甚至跨多行,如 C 和 Python)。与上述缺点相比,它只是没有回报。

于 2010-08-24T21:01:41.023 回答
2

我能想到需要特定语法的唯一原因是,您不必担心转义字符。我不确定这是不是这个原因,但它肯定是这种语法的一个优势。

当您必须定义语法时,最后一个示例有点问题,因为您使用单个标记"来执行多项操作,并且使用标准 LALR(1) 并不容易,您需要输入更多标记来预测正确的规则使用。

有关LALR 解析器的更多信息。

于 2010-08-24T20:43:37.527 回答
0

我怀疑其中一部分是试图允许体面的格式。

在 C 或 C++ 中,您始终可以将一个长字符串编写为一个长字符串,但这会向右扩展,如果它环绕它会很丑陋。允许将其拆分可以更轻松地保持程序的格式不变。通常,C 和 C++ 程序不会大量使用多行字符串,以至于更改语言以使它们更方便是有用的。

在字符串中显式显示行尾等通常很有用,并允许它保留周围程序的格式。有时能够按照您想要的方式编写文字字符串也很有用,Ruby、Python 和 C# 示例展示了按照您想要的方式编写文字多行字符串的方法。

您的建议侵入了格式,就像 Ruby 和 Python 示例一样,并且看起来确实不是更好的解决方案。将这些字符串与普通字符串混淆太容易了,而 Ruby 和 Perl HERE 文档以及 Python 三引号准确地显示了这些字符串是什么。

于 2010-08-24T21:00:02.217 回答