【问题标题】:Learn Ruby The Hard Way Chapter 9 Triple Quotes学习 Ruby The Hard Way 第 9 章 三引号
【发布时间】:2015-01-16 08:52:34
【问题描述】:

Zed Shaw 的 Learn Ruby the Hard Way 第 9 章使用了三重双引号:

puts """
There's something going on here.
With the three double-quotes.
We'll be able to type as much as we like.
Even 4 lines if we want, or 5, or 6.
"""

我尝试用单双引号写同样的东西,它似乎工作正常。我不明白三重双引号和单双引号之间的区别。我错过了什么吗?

【问题讨论】:

标签: ruby string-literals


【解决方案1】:

我不知道他为什么在他的书中使用三重双引号。它们没什么特别的,一个双引号就可以了。

这是红宝石的一个鲜为人知的“特性”——它只是将相邻的字符串粘合在一起。

s = "hello " "world" # equivalent to "hello " + "world"
s # => "hello world"

所以你的例子相当于

puts "" + "
There's something going on here.
With the three double-quotes.
We'll be able to type as much as we like.
Even 4 lines if we want, or 5, or 6.
" + ""

更多字符串技巧:http://pivotallabs.com/stupid-ruby-quoting-tricks/

【讨论】:

  • 您在第一个字符串中包含了一个空格,因此返回结果将是“hello world”。
  • @aceofbassgreg:啊,对不起!忘记更新评估结果了。
【解决方案2】:

我认为你在书中发现了一个错误——他使用三引号的原因可能是 Python 仅在使用三引号时才允许你将字符串写成多行,所以可能是他从“艰难地学习 Python”或简单地混合语言。

在 Ruby 中,您甚至可以在单引号中包含新行。

让他知道,我相信他会很感激的。

【讨论】:

  • 错误是什么?代码没有任何问题(除了它有一些不必要的引号,我希望这是他的意思)。
  • @CarySwoveland 三引号中的文本为:"""There's something going on here. With the three double-quotes. We'll be able to type as much as we like. Even 4 lines if we want, or 5, or 6.""",这意味着在 Ruby 中需要三引号才能编写多行字符串。这适用于 Python,但不适用于 Ruby
  • 哈!我没有注意引用的话在说什么!
  • 三引号中的文本与您在此处显示的内容不同,@BeatRichartz,因为它错过了字符串开头的换行符。实际上,使用引号和 HereDoc 之间的不同之处在于,如果您尝试以相同的方式使用它们,您最终可能会错过字符串以换行符开头。 (你也不显示文本结束换行符。)
  • @vgoff 我在这里写下文本的目的是为了显示文本的内容。我同意python的三引号多行字符串语法是heredoc的一种形式存在混淆(它不是),但这里的混淆不是关于它是一个heredoc,而是关于它是构建多行字符串所必需的ruby语法(它是不,这是python语法)。事实上,我在评论中引用的文本没有任何换行符,所以它绝对不准确地表示书中的实际内容,但我认为它很好地传达了它的目的句子。
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
相关资源
最近更新 更多