Elixir中的一项操作正在回报我
"[some_data1, some_data2]"
我想删除列表周围的引号,即我希望最终结果看起来像这样
[some_data1, some_data2]
答案 0 :(得分:1)
这是一种方法:
data.txt:
[{:a, 2}, "hello", %{b: 2, c: 3}]
a.ex:
defmodule A do
def get_term(fname) do
{term, _binding} = Code.eval_file(fname, ".")
term
end
end
在iex中:
iex(7)> c "a.ex"
warning: redefining module A (current version defined in memory)
a.ex:1
[A]
iex(8)> A.get_term "data.txt"
[{:a, 2}, "hello", %{b: 2, c: 3}]
Code.eval_file/2-计算文件内容...它返回文件中最后一个表达式的结果。
binding
返回的Code.eval_file/2
的工作方式如下:
data.txt:
a = 3
b = 4
"#{a} + #{b} = #{a+b}"
a.ex:
defmodule A do
def get_term(fname) do
{term, binding} = Code.eval_file(fname, ".")
IO.inspect binding
IO.puts binding[:a]
term
end
end
在iex中:
iex(22)> c "a.ex"
warning: redefining module A (current version defined in memory)
a.ex:1
[A]
iex(23)> A.get_term "data.txt"
[a: 3, b: 4]
3
"3 + 4 = 7"
答案 1 :(得分:0)
这是一种使用二进制模式匹配的方法:
def dequote(input) do
length = String.length(input) - 2
<<"\"", unquoted::binary-size(length), "\"">> = input
unquoted
end
这是使用正则表达式的一种方法:
def dequote(input) do
[dequote] = Regex.run(~r/\A"(.*)"\z/, input, capture: :all_but_first)
dequote
end