{status, body} = File.read("/etc/hosts")
if status == :ok do
hosts = String.split body, "\n"
hosts = Enum.map(hosts, fn(host) -> line_to_host(host) end)
else
IO.puts "error reading: /etc/hosts"
end
我有下面的Elixir函数,它读取/etc/hosts文件并尝试使用String.split逐行拆分。
然后,我通过主机行列表映射,并为每个调用line_to_host(host)。 line_to_host方法使用" "拆分行,然后我想设置from和to变量:
def line_to_host(line) do
data = String.split line, " "
from = elem(data, 0) // doesn't work
to = elem(data, 1) // doesn't work either
%Host{from: from, to: to}
end
我查看了stackoverflow、elixir文档和谷歌搜索,以了解如何获取特定索引处的列表元素。
我知道有head/tail
,但肯定有更好的方法来获取列表元素。
elem(list, index)
正是我需要的,但不幸的是它不能与String.split
一起使用。
如何在Elixir中通过ID获取列表/元组元素
if
后面执行{status, body} = File.read("/etc/hosts")
。最好使用模式匹配:case File.read("/etc/hosts") do {:ok, body} -> ...
- José Valim