在Ruby/Rails中是否有<<<EOD的等价物?

8
在PHP中,以下代码可以让我创建一个字符串而无需转义引号:
$string = <<<EOD

',. whatever <"",'

EOD;

echo $string;

在Ruby/Rails中是否有类似的东西?
6个回答

11

Ruby的heredocs基本相同,有些细微变化,并且有两种不同的形式:

1)heredoc结尾必须在行首:

string = <<EOD

  ',. whatever <"",'

EOD

puts string

2) heredoc结束符可能前面有空格:

string = <<-EOD

  ',. whatever <"",'

       EOD

puts string

10

这被称为 here doc

从链接中可以看到,Ruby 的写法应该是:

puts <<-GROCERY_LIST
Grocery list
------------
1. Salad mix.
2. Strawberries.*
3. Cereal.
4. Milk.*

* Organic
GROCERY_LIST

结果:

$ ruby grocery-list.rb
Grocery list
------------
1. Salad mix.
2. Strawberries.*
3. Cereal.
4. Milk.*

* Organic

10

Ruby通过提供两种here doc语法来支持多行字符串。第一种语法使用额外的破折号,并允许您缩进“here doc结束定界符”(在示例中为'eos')。

<<-eos
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.

eos

还有一种here doc语法不需要使用破折号,但是它要求"here doc的结束符"在第一列(或者没有前导空格)。

<<eos

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
eos

3

这被称为heredoc,在Ruby中用<<WHATEVER表示。


2

你可以像这样做

string = <<EOD

',. whatever <"",'

EOD

puts string

1
output = <<-TEXT
   my text
   block
TEXT

^他们说的话


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接