Elixir 特殊字符作为符号中的选项参数
在我学习长生不老药的过程中,我试图制作一个简单的符号来解析csv 我已经设法制作了一个sigil来实现这一点,但是我找不到一种方法使它能够处理特殊字符,例如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
代码>
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
是正则表达式的一种“函数参数”)