DRYな備忘録

Don't Repeat Yourself.

【Elixir】argument error, :erlang.++({'content-type', 'image/png'}, [])

いやーよくわからないエラーメッセージとスタックトレースなんだけど。なんか深そうだし。

** (exit) an exception was raised:
    ** (ArgumentError) argument error
        :erlang.++({'content-type', 'image/png'}, [])
        (erlcloud) src/erlcloud_s3.erl:699: :erlcloud_s3.put_object/6
        (elixir) lib/enum.ex:1043: anonymous fn/3 in Enum.map/2

とりあえず場所はここ

github.com

Eralng的な++演算子にへんな引数渡してる感じある。なんこか試してみる

iex(17)> :erlang.++({'hoge', 'fuga'}, [])
** (ArgumentError) argument error
    :erlang.++({'hoge', 'fuga'}, [])
iex(17)> :erlang.++({'hoge', 'fuga'}, {'foo','bar'})
** (ArgumentError) argument error
    :erlang.++({'hoge', 'fuga'}, {'foo', 'bar'})
iex(17)> :erlang.++({'hoge', 'fuga'}, '')
** (ArgumentError) argument error
    :erlang.++({'hoge', 'fuga'}, [])
iex(17)> :erlang.++({'hoge', 'fuga'}, 'aaaa')
** (ArgumentError) argument error
    :erlang.++({'hoge', 'fuga'}, 'aaaa')
iex(18)> :erlang.++([], [])
[]
iex(19)> :erlang.++(["hoge", "fuga"], ["foo", "bar"])
["hoge", "fuga", "foo", "bar"]
iex(20)>

なるほど。list型を合体するやつっぽいな。で、そこにtupleを渡してしまっている。

解決

- {'content-type', 'image/png'}
+ [{'content-type', 'image/png'}]

DRY