Избегайте закрытой скобки в эликсире сигил

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

Это код у меня есть

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/

Другие вопросы по тегам