2016-11-23 75 views
0
template = <<-TPL.gsub(/^\s+/,'') 
    ╭───────╮ 
    | X X X | 
    | X X X | 
    | X YYX | 
    | X X X | 
    ╰───────╯ 
    TPL 

这是一个从gem rubycards的摘录。<< - 是否意味着红宝石?

我知道它在模板中存储了一些字符串。但是<<-是做什么的?

+1

这个功能在这里被称为doc。这是一种定义多行字符串的方法。结果包含'<< - TPL'和'TPL'之间的所有**行**。 'gsub(/^\ s + /,'')'应用于此字符串。 – sschmeck

+0

@Jordan:'duplicate'和''解决了我的问题'标签有什么区别? – InQusitive

回答

2

它被称为heredoc

如果你正在写文本的一大块,你可以使用“立即文档” 或“定界符”:

expected_result = <<HEREDOC 

This would contain specially formatted text. 

That might span many lines 
HEREDOC 

的定界符的开始line following < < HEREDOC并以 以HEREDOC开头的下一行结束。结果包括结尾 换行符。

您可以使用带有heredoc的任何标识符,但通常使用全部大写的 标识符。

expected_result = <<-INDENTED_HEREDOC 
This would contain specially formatted text. 

That might span many lines 
    INDENTED_HEREDOC 

注意,而结束标识符可缩进时, 内容总是被看作它是齐平: - “” <后<

如果你把一个你可以缩进结束标识符剩下。如果您缩进 内容,则这些空格将显示在输出中。

1

不幸的是,Ruby中的<<运算符有很多用途。但是,在您的具体情况下,<<用于声明跨越多行的字符串。这可以让你获得矩阵看标准输出。

What does << mean in Ruby?是一个有很多其他链接

+0

问题是关于'<< - ',而不是'<<':) –

+0

对不起,TPL没有缩进,所以我以为他甚至不想知道 - 是什么。 –