Избегайте закрытой скобки в эликсире сигил
Я хочу, чтобы у меня был собственный символ, чтобы в каждой строке мог быть один элемент.
Это код у меня есть
def sigil_l(text,[]), do: String.split(text,"\n")
Это прекрасно работает для
~l(Clash of Titans
The day after Tomorrow
The Transporter
)
Это не для
~l(The man from Earth (2007)
Gone Girl (2014)
)
Обратите внимание на скобки выше
Это сообщение об ошибке
"{" starting at line 38 is missing terminator "}". Unexpected token: )
(elixir) lib/kernel/parallel_compiler.ex:97: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/8
Ожидаемый результат
["The man from Earth (2007)",
"Gone Girl (2014)"]
Какой код нужно изменить. Нужно ли добавлять какие-либо символы на входе и обрабатывать в определении сигил?
Обновить
Решение, которое дал @AbM, является правильным. Я был на Elixir версии 1.0.4, поэтому он не работал. Это работает на 1.1.x
Решение
~l(The man from Earth (2007\)
Gone Girl (2014\)
)
2 ответа
Вы должны избежать закрывающей скобки с \)
:
~l(The man from Earth (2007\)
Gone Girl (2014\)
)
Вот мой скрипт и вывод iex:
defmodule SigilL do
def sigil_l(text,[]), do: String.split(text,"\n")
end
Существуют также различные разделители для сигил. Так что вместо:
~s(My funky "string(\)")
Вы также можете использовать:
~s|My funky "string()"|
Который избегает использования косой черты. Очевидно, это означает, что вам придется найти другой разделитель для:
~s|My funky "string(|)"|
Но, по крайней мере, для этого есть решение. https://elixirschool.com/en/lessons/basics/sigils/