0

我想有一个自定义的印记,这样我就可以每行有一个元素。

这是我有的代码

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\)
   )
4

2 回答 2

5

您应该使用以下命令转义右括号\)

~l(The man from Earth (2007\)
   Gone Girl (2014\)
)

这是我的脚本和 iex 输出:

defmodule SigilL do

  def sigil_l(text,[]), do: String.split(text,"\n")

end

在此处输入图像描述

于 2015-12-19T08:02:49.837 回答
1

印记也有多种分隔符。所以而不是:

~s(My funky "string(\)")

您还可以使用:

~s|My funky "string()"|

这避免了使用正斜杠。显然,这意味着您必须为以下内容找到另一个分隔符:

~s|My funky "string(|)"|

但至少有一个可用的解决方案。 https://elixirschool.com/en/lessons/basics/sigils/

于 2018-09-15T11:02:20.463 回答