gpt4 book ai didi

elixir - 特殊字符作为 sigils 中的选项参数

转载 作者:行者123 更新时间:2023-12-04 15:20:55 29 4
gpt4 key购买 nike

在我学习 Elixir 的过程中,我正在尝试制作一个简单的符号来解析 csv。

我已经设法制作了一个印记来做到这一点,但是我找不到一种方法让它与特殊字符一起工作,例如 ; .

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

我可以逃脱;不知何故,还是不可能做到这一点?

最佳答案

分号 ( ; ) 在 Elixir 中扮演着特殊的角色 - 它用于 delimiting multiple expressions在单行代码上。因此,我认为您无法逃脱它。 事实上,您不能使用任何 Elixir 特殊字符作为修饰符,因为它可能会导致编译错误。

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

我们不应该使用修饰符作为将附加参数传递给底层 sigil 函数的一种方式 - 正如您正在做的那样 - 使用修饰符( x; )来指定应该用作分隔符来分割字符串的字符。

PS:
有点类似于您创建的印记,可在 Elixir 中使用 - 名为 Word List - 它使用修饰符来指示返回类型 - 然而,用于拆分单词的分隔符是固定的 - 它始终是一个空格字符。

关于elixir - 特殊字符作为 sigils 中的选项参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com