Разграничение строк в Эрланге - PullRequest
5 голосов
/ 09 октября 2009

Есть ли в Эрланге эквивалент """ в Perl?

Я бы хотел иметь возможность определять довольно длинную строку, полную двойных кавычек, без экранирования каждой из них. Это возможно?

Не стесняйтесь, дайте мне знать, если я делаю это неправильно .

Спасибо!

Ответы [ 5 ]

3 голосов
/ 10 октября 2009

номер

Нет другого способа сделать это. Предложения, представленные здесь, работают, но кажутся более сложными, чем прямое решение, и менее ясными.

3 голосов
/ 09 октября 2009

Как насчет этого:

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

Вы можете определить макрос для сокращения atom_to_list для улучшения читаемости.

2 голосов
/ 09 октября 2009

Во-первых, я хотел бы сказать, что наличие такой строковой цитаты - неплохая идея для будущих версий Erlang. Но я не задерживаю дыхание, чтобы оно прибыло. Python хорошо использует их в качестве «необработанных» многострочных строк документации.

Если бы я был достаточно раздражен необходимостью избегать кавычек и обратной косой черты, я бы посмотрел на разработку трансформирующего макроса в моем редакторе, чтобы сделать это для меня при текущем выделении текста. Или, может быть, просто реализуем это с помощью регулярного выражения в sed, чтобы вырезать и вставить. :)

$ echo 'Testing a "robust" way to \quote\ things.' | sed -e 's/[\\"]/\\&/g'
Testing a \"robust\" way to \\quote\\ things.
1 голос
/ 09 октября 2009

Сохранить ваш текст в отдельном файле

1 голос
/ 09 октября 2009

Я считаю, что ваш лучший выбор - поместить вашу многострочную строку, заполненную двойной кавычкой, в отдельный файл, а затем прочитать ее с помощью нового файла: read_line, объединяющего строки при загрузке приложения.

Или, если вы хотите иметь über-mess, вы можете комбинировать это с синтаксическим преобразованием. Вы можете поместить свою строку (строки) в исходный код, закомментировать, и когда вызывается преобразование синтаксического анализа, вы открываете исходный файл, считываете текст из комментариев, объединяете и заменяете. Пример:

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

...

В вашем преобразовании синтаксического анализа вы ищите строки, начинающиеся с MY_FAKE_STRING. Когда вы найдете его, вы открываете исходный код вашего модуля и читаете строки, пока не достигнете той же самой строки. Затем прочитайте свой источник построчно, пока не появятся комментарии, и объедините их. Достигнув первой пустой (или некомментированной) строки, у вас есть строка, которую вы можете вернуть вместо фальшивой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...