我拥有的函数使用一些用html编写的表,并将其转换为6元组原子字符串对的列表(例如“ ...<tbody><tr><td> name: dave ...
” ---> ({:name, "dave"}, {:lesson, "dave"}, {...})
。我使用Enum.each进行迭代遍历每一行并用正确的值替换它。该算法可以工作,但它不会返回所得到的答案,它只是返回:ok原子而不是实际的数据结构。也许是我对函数式语言缺乏了解。>
我已经读到,最后一行是长生不老药将作为返回值,但是显然没有这样做。当我在枚举器函数中打印该行时,它将变成正确的输出。但是,如果我在枚举之外都做同样的事情:
rows = Enum.each(...)
IO.puts rows
再次给我:ok
。
#takes the html of table and returns a label-value pair for each students lesson from tutorful
def convertRec(table) do
rows = find_all_within_element(table, :tag, "tr")
## enumerate through table to find client-lesson info
Enum.each(rows, fn row ->
rowLabel = [:name, :lesson, :date, :time, :price, :status]
row = find_all_within_element(row, :tag, "td")
|> Enum.map(fn x -> String.split(inner_text(x), "\n", trim: true) end)
|> Enum.concat()
|> Enum.chunk_every(6) # 6 = length(rowLabel)
|> Enum.map(fn vals -> vals = Enum.zip(rowLabel, vals) end)
#for vals <- rowRecord do
# Enum.each(vals, fn {key, val} -> IO.puts "#{key} --> #{val}" end)
#end
end)
end
我希望运行它:
rows = convertRec(table)
for rowRecord <- rows do
for pairs <- rowRecord do
Enum.each(pairs, fn {key, val} -> IO.puts "#{key} --> #{val}" end)
end
end
并获得
name--> dave
lesson --> maths
...
但是我只收到错误消息:“未为:ok实现协议Enumerable”