Elixir heredocs关闭三重引号(“”“)行为

时间:2017-02-02 23:15:48

标签: elixir

我注意到以下两个调用会产生不同的结果字符串:

# Closing quotes not indented
"""
 a
"""

# Closing quotes indented
"""
 a
 """

第一个调用将返回" a\n",而第二个调用将返回a\n

看起来好像缩进引号的缩进级别指示一个点,直到对于heredoc中的每一行截断前导空格。如果您有8个前导空格和4个结尾引号缩进,则最终会在结果字符串中显示4个前导空格。第一个实际字符后的字符和所有内容都不会被截断。

我没有在Elixir文档中找到有关该行为的任何文档。这是一个错误吗?

1 个答案:

答案 0 :(得分:4)

我没有找到任何关于此的文档,但这绝对是故意作为主题

的提交
  

根据heredoc结束的位置允许heredocs对齐。

committed by José Valim on 20 Feb 2012,它在elixir_tokenizer中包含一个新功能,其中包含注释:

%% Remove spaces from heredoc based on the position of the final quotes.

和一个类似于你在问题中写的那个的测试用例:

test :double_quoted_aligned_heredoc do
  assert_equal "foo\nbar\nbar\n", """ <> "bar\n"
  foo
  bar
  """
end