如何在Elixir中删除列表周围的引号

时间:2019-06-13 19:36:17

标签: elixir

Elixir中的一项操作正在回报我

"[some_data1, some_data2]"

我想删除列表周围的引号,即我希望最终结果看起来像这样

[some_data1, some_data2]

2 个答案:

答案 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