【问题标题】:Escape closed parenthesis in elixir sigil在长生不老药印记中转义右括号
【发布时间】:2015-12-19 06:40:40
【问题描述】:

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

这是我的代码

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

【问题讨论】:

  • 你应该改变你的问题。您正在尝试转义右括号而不是括号。
  • @OnorioCatenacci 感谢您的建议。更改了问题标题。

标签: elixir sigils


【解决方案1】:

你应该用\)转义右括号:

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

这是我的脚本和 iex 输出:

defmodule SigilL do

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

end

【讨论】:

  • 不,这是带有建议更改的输出。 “来自地球的男人 (2007\) Gone Girl (2014\)”
  • 为我工作。添加了iex 输出
  • 我做错了什么。 ` iex(1)> defmodule Foo do` ...(1)> def sigil_l(text,[]), do: String.split(text,"\n") ...(1)> end {:module , 富, >, {:sigil_l, 2}} iex(2)> import Foo nil iex(3)> ~l(The man from Earth (2007) ...(3)> Gone Girl (2014) ... (3)> ) [《来自地球的男人 (2007\)》、《消失的爱人 (2014\)》、《》] iex(4)>
  • 你是对的。它对我不起作用,因为我有 elixir 版本 1.0.4。升级到 Elixir 1.1.1 并且可以正常工作。感谢发布完整的shell图片,它提供了升级版本的线索。
【解决方案2】:

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

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

你也可以使用:

~s|My funky "string()"|

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多