I was considering making it only accept keywords, and return keywords as well.
However, I can see benefits in accepting Enumerables. What do you think about using another verb such as cast or coerce, instead of validate, for this typing (e.g. @spec Keyword.cast!(Enumerable.t(), keyword) :: keyword | no_return and @spec Map.cast!(Enumerable.t(), keyword) :: map | no_return)? Should I also implement it for Map as well, or maybe add it in a second PR? Thanks for the idea on Enumerables! Em segunda-feira, 26 de julho de 2021 às 12:47:31 UTC-3, Wojtek Mach escreveu: > Keyword.validate will accept just a keyword, right? Did you consider > making it accept any enumerable of pairs, just like Keyword.new does? Same > for Map. > > I think one particular scenario is something like this: > > def foo(opts) when is_list(opts) do > config = Map.validate!(opts, …) > config.name # the assertive map.key is really convenient here > > what do you think? The only concern, besides feature creep :), is perhaps > validate is not the best name given it accepts broader set of inputs. But > then again, Keyword.keyword and in particular Map.map are maybe a bit > awkward. > > On July 26, 2021, josevalim <jose....@gmail.com> wrote: > > I debated this with the Elixir team and we agreed on the following API: > Keyword.validate! :: keyword | no_return Keyword.validate :: {:ok, > keyword} | {:error, unknown_keys, missing_keys} > The same functionality would have to be defined for Map. > The API for Keyword.validate! and Map.validate! would be the exact same as > the one found in Nx.Defn.Kernel.keyword!. > Could you please send a PR? Or open up an issue if you can't submit it at > the moment. > > Thanks!On Monday, July 12, 2021 at 12:46:38 PM UTC+2 polva...@gmail.com > wrote: > > > I would propose to add this to the Kernel module, to mirror the struct! >> helper. But adding to Keyword also works. Thoughts? >> >> Makes sense! I suggested Keyword mostly because there's the module >> already, but since we have struct! in Kernel, it might be better to have >> keyword! there too. Usage would also be nicer this way. >> >> > Should the bang version really raise for redundant options? >> >> As José said, it would help clean out stray options being passed. I can >> think of a few cases in which I thought one option was being used, but had >> either a typo or wrong name altogether (think "end" vs "end_datetime" sort >> of situation). >> However, I can see a less strict version being useful as well. Perhaps >> there could be a keyword!/3 which accepted options like: keyword!(opts, >> [extra_keys: true], key1: :default1, key2: :default2) >> >> -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-co...@googlegroups.com. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/9b83a803-c2c1-49e7-a531-56791607bcaan%40googlegroups.com > > <https://groups.google.com/d/msgid/elixir-lang-core/9b83a803-c2c1-49e7-a531-56791607bcaan%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/a96fb19a-8148-41dc-8b45-0e2b9fe755b8n%40googlegroups.com.