(FunctionClauseError)Access.get / 3中没有匹配的功能子句-单独的问题,因为该主题中的其他问题被删除

时间:2019-01-14 16:12:00

标签: elixir

问题编号。 1为什么主持人删除了我在(FunctionClauseError) no function clause matching in Access.get/3中的其他问题,却在询问有关原始问题答案的问题

问题编号。 2我试图理解为什么: 原始答案(无效)

{:ok, decode_csv} =
  File.stream!('users_departs.csv')
  |> Stream.drop(1)
  |> CSV.decode(headers: [:name, :title, :departments])

提高:

== Compilation error in file lib/data_dictionary.ex ==
** (MatchError) no match of right hand side value: #Function<62.51129937/2 in Stream.transform/3>
...

此文档含糊不清,很不幸,我还没有升级到CSV 2.2.1版本。

我很困惑,不知道该如何处理CSV.decode的返回值...

衷心祝福托马斯

1 个答案:

答案 0 :(得分:2)

文档中明确指出,CSV.decode/2返回。在终止之前,它是一个流。也就是说,您需要确保a)以某种方式终止它,例如通过使用Enum.to_list/1转换为列表,并且b)您可以正确处理返回值,它们基本上是元组{:ok, values} {:error, description}

对于平凡的情况,当您可以提出错误时,只需使用爆炸的版本CSV.decode!/2,它会返回流列表或在未能解析任何行时引发。 / p>

'users_departs.csv'
|> File.stream!()
|> Stream.drop(1)
|> CSV.decode!(headers: [:name, :title, :departments])
|> Enum.to_list() # ESSENTIAL!