2016-04-19 9 views
1

、私は非常に大規模な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)に渡されると仮定していますが、これはここでの失敗のポイントです。この修正方法はわかりません。

答えて

4

File.openは、{:ok, pid}または{:error, reason}のいずれかを返します。失敗した場合の2番目のもの。ここでは、ファイルが存在しないことを意味する{:error, :enoent}を取得しています - あなたのパスに何が間違っているか把握する必要があります。

また、あなたのパイプラインでFile.openの強打のバージョンを使用する場合があります

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

この1つはFile.openのように振る舞うが、その代わりにエラー値を返すので例外が発生します。成功すると、ファイルを表すpidが返されますが、それはIO.read呼び出しに必要なものです。

+0

ありがとう、私は私のパスを解決し、後に私の他のエラーを修正したバングを使用しました。 –

関連する問題