Erlang中的字符串分隔符

时间:2009-10-09 04:52:18

标签: string erlang

在Erlang中是否有与Perl的"""等效的内容?

我希望能够定义一个充满双引号的相当长的字符串而不会转义每一个字符串。这可能吗?

如果我做错了,请随时告诉我。

谢谢!

5 个答案:

答案 0 :(得分:3)

这个怎么样:

1> atom_to_list('He said "hello" and then she answered "hi".').
"He said \"hello\" and then she answered \"hi\"."

您可以定义一个宏来缩写atom_to_list以提高可读性。

答案 1 :(得分:3)

没有

基本上没有其他方法可以做到这一点。这里提出的建议有效但看起来比直接解决方案更复杂,而且不太清楚。

答案 2 :(得分:2)

首先,我想说,对于未来版本的Erlang,使用这样的字符串引用并不是一个坏主意。但是我没有呼吸它到达它。 Python充分利用它们作为“未经编辑的”多行文档字符串。

如果我因为需要转义引号和反斜杠而感到非常恼火,我会考虑在编辑器中设计一个转换宏来为我做当前文本选择。或者也许只是用sed to cut'n'paste的regexp实现它。 :)

$ echo 'Testing a "robust" way to \quote\ things.' | sed -e 's/[\\"]/\\&/g'
Testing a \"robust\" way to \\quote\\ things.

答案 3 :(得分:1)

我认为您最好的选择是将多行双引号完整字符串放入单独的文件中,然后使用新文件读取它:read_line,在应用启动时连接这些行。

或者如果你想要一个超级混乱,你可以将它与解析变换结合起来。您可以将您的字符串放入源代码中,注释掉,并在调用解析转换时,打开源文件,从注释中读出文本,连接和替换。例如:

...
Len = erlang:length("MY_FAKE_STRING_13"),
%% This is my "double-qouted"
%% "multi-line" string;
%% you know what I mean ;)

...

在您的解析转换中,您将查找以MY_FAKE_STRING开头的字符串。找到一个后,打开模块的源代码,然后读取行,直到达到相同的字符串。然后逐行阅读您的源代码,直到评论到来,并将它们连接起来。到达第一个空(或非注释)行,你有你的字符串,你可以返回而不是伪字符串。

答案 4 :(得分:1)

将文字保存在单独的文件中