В elixir я бы хотел иметь возможность фильтровать таблицу ets с помощью функции.
В настоящее время у меня есть простой пример таблицы ets в оболочке iex ...
iex> :ets.new(:nums, [:named_table])
:nums
iex> :ets.insert :nums, [{1}, {2}, {3}, {4}, {5}]
true
fun = :ets.fun2ms(fn {n} when n < 4 -> n end)
[{{:"$1"}, [{:<, :"$1", 4}], [:"$1"]}]
:ets.select(:nums, fun)
[1, 3, 2]
Все это работает так, как вы ожидаете. Мой вопрос касается функции, используемой для запроса таблицы ETS. В настоящее время он использует защитное предложение для фильтрации результатов менее 4.
Я хотел бы знать, есть ли способ поместить синтаксис предложения guard в тело функции. Например ...
iex> fun2 = :ets.fun2ms(fn {n} -> if n < 4, do: n end)
но если я сделаю это, то получу следующую ошибку ...
Error: the language element case (in body) cannot be translated into match_spec
{:error, :transform_error}
Возможно ли что-то подобное?