无法获得elixir中方法的返回值映射

时间:2018-02-12 08:31:47

标签: elixir

我正在使用elixir库Rox来管理rocksdb中的数据。删除方法定义如下:

delete(db_or_cf, key, write_opts \\ [])
delete(Rox.DB.t | Rox.ColumnFamily.t, key, write_options) ::
  :ok |
  {:error, any}

我正在使用以下方式调用此方法:

result = case Rox.delete(db, :erlang.term_to_binary(key)) do
            {:ok} -> {:ok}
            {:error} -> {:error}
        end

但我收到了一个错误:(CaseClauseError) no case clause matching: :ok。 我是elixir的新手,我不知道为什么:ok不匹配。

2 个答案:

答案 0 :(得分:1)

该函数返回:ok{:error, any()},因此您需要匹配的模式为:ok{:error, error}{}周围额外:ok,而:error元组应该有第二个元素。

case Rox.delete(db, :erlang.term_to_binary(key)) do
  :ok -> ...
  {:error, error} -> ...
end

答案 1 :(得分:0)

{:ok}不是:ok。第一个表达式是一个元素元组,第二个表达式只是一个原子。

试试这个:

result = case Rox.delete(db, :erlang.term_to_binary(key)) do
  :ok -> :ok
  {:error, _any} -> {:error, _any}
end