【问题标题】:elixir multiple arguments with the pipe operator使用管道运算符长生不老药
【发布时间】:2016-04-20 20:47:44
【问题描述】:

我正在尝试加载一个非常大的 JSON 文件并将其绑定到一个变量,这是我的代码失败.....

deps = File.open("../DepMap.json")
    |> IO.read(:all) 
    |> JSX.decode

我回来了

** (FunctionClauseError) no function clause matching in :io.request/2
(stdlib) io.erl:556: :io.request({:error, :enoent}, {:get_line, :unicode, ""})
(elixir) lib/io.ex:82: IO.do_read_all/2
lib/depchecker.ex:6: (module)
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6

我在这里缺少什么?我假设 File.open 的结果作为第一个参数传递给 IO.read(:all) 但这是这里的失败点,我不知道如何纠正这个问题。

【问题讨论】:

    标签: elixir


    【解决方案1】:

    File.open 返回{:ok, pid}{:error, reason}。第二个在失败的情况下。在这里你得到{:error, :enoent},这意味着文件不存在——你可能需要弄清楚你的路径有什么问题。

    您可能还想在管道中使用 bang 版本的 File.open

    deps = File.open!("../DepMap.json")
    |> IO.read(:all) 
    |> JSX.decode
    

    这个行为类似于File.open,但会引发异常而不是返回错误值。成功时,它只返回代表文件的pid,这是IO.read 调用所需要的。

    【讨论】:

    • 谢谢,我解决了我的路径,然后使用 bang 纠正了我的其他错误。
    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多