Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 特殊字符作为符号中的选项参数_Elixir - Fatal编程技术网

Elixir 特殊字符作为符号中的选项参数

Elixir 特殊字符作为符号中的选项参数,elixir,Elixir,在我学习长生不老药的过程中,我试图制作一个简单的符号来解析csv 我已经设法制作了一个sigil来实现这一点,但是我找不到一种方法使它能够处理特殊字符,例如 defmodule CommaSigil do def sigil_v(lines, []), do: parse(lines,",") def sigil_v(lines, delimiter), do: parse(lines,"#{delimiter}") defp parse(lines, delimiter) do

在我学习长生不老药的过程中,我试图制作一个简单的符号来解析csv

我已经设法制作了一个sigil来实现这一点,但是我找不到一种方法使它能够处理特殊字符,例如

defmodule CommaSigil do
  def sigil_v(lines, []), do: parse(lines,",")
  def sigil_v(lines, delimiter), do: parse(lines,"#{delimiter}")

  defp parse(lines, delimiter) do
    lines
    |> String.rstrip
    |> String.split("\n")
    |> Enum.map fn line ->
      String.split(line, delimiter)
    end
  end
end

defmodule Example do
  import CommaSigil

  def test do
    ~v"""
    hello,world,again
    1,2,3
    """
  end

  def test2 do
    ~v"""
    helloxworldxagain
    1x2x3
    """x
  end

  def test3 do
    ~v"""
    hello;world;again
    1;2;3
    """; # <-- Elixir does not care about the ';'
  end
end

Example.test
|> IO.inspect

Example.test2
|> IO.inspect

Example.test3
|> IO.inspect
defmodule CommaSigil do
def sigil_v(行,[]),do:parse(行,“,”)
def sigil_v(行,分隔符),do:parse(行,“{delimiter}”)
defp解析(行、分隔符)do
线
|>String.rstrip
|>String.split(“\n”)
|>Enum.map fn行->
String.split(行,分隔符)
结束
结束
结束
defmodule示例do
进口康马斯吉尔
def测试do
~v”“”
你好,世界,又来了
1,2,3
"""
结束
deftest2do
~v”“”
helloxworldxagain
1x2x3
“x
结束
deftest3do
~v”“”
你好,世界,又来了
1;2;3
"""; #  检查
示例2.test2
|>检查
示例3.test3
|>检查
我能逃脱
字符,还是不可能做到这一点?

分号(
)在长生不老药中起着特殊的作用-它用于单行代码。因此,我认为你无法逃脱事实上,您不能使用任何Elixir特殊字符作为修饰符,因为这可能会导致编译错误。

此外,sigils中的修饰符是sigils逻辑的一种选项。例如,
i
是一个修饰符,用于在正则表达式中进行不区分大小写的匹配。对于给定符号的定义,每个修饰符值的含义是固定的

我们不应该使用修饰符作为向基础sigil函数传递附加参数的方式—正如您所做的—使用修饰符(
x
,和
)指定应该用作分隔字符串的分隔符的字符

PS:
有些类似于您创建的符号,在Elixir中可用-其名称-它使用修饰符指示返回类型-用于拆分单词的分隔符是固定的-它始终是一个空格字符。

对于正则表达式符号的
i
,难道没有人能提出同样的论点吗?。。(也就是说,
i
是正则表达式的一种“函数参数”)