我正在使用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不匹配。
答案 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