Вот один из способов:
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"