It's more than syntax sugar, it takes a load off engineers by having its own docs, tests, and type checking. These sort of value ads are great for a language, lest you end up with multiple libraries that all have the same or similar functions with different names, docs, tests, etc.
On Sat, Oct 10, 2020 at 5:58 AM jb.am...@gmail.com <jb.amar...@gmail.com> wrote: > I was going to suggest something very similar to `Map.rename_key/3`. > > To add to what Jonar already said, I think that the big plus of a > `Map.rename_key/3` would be the readability of pipe chains, specially when > you have to do a few renames. For example: > > ``` > # Before > map > |> Map.put(:new_key, map.old_key) > |> Map.delete(:old_key) > > # After > map > |> Map.rename_key(:old_key, :new_key) > ``` > > At the end of the day this is just a bit of syntactic sugar over functions > that already exist, so I'm curious to know what the core team thinks about > bringing something like this into the language. > > I'm happy to open a PR if we think it makes sense to do this. > > On Wednesday, 19 August 2020 at 19:53:29 UTC+1 halos...@gmail.com wrote: > >> I think that this can be done as a library. I’ve contributed to one >> https://github.com/byjpr/MapRewire that works pretty well. I’ve got >> another library that I need to extract from our source code and release as >> a package, but it *could* probably be extended (trivially) to allow key >> renames as well as its current function (safe atomization of map keys as >> well as case conversion). >> >> -a >> >> On Mon, Aug 17, 2020 at 5:35 PM Jonathan Arnett <jonar...@gmail.com> >> wrote: >> >>> I often times find myself in situations where I need to rename one or >>> more keys in a Map, when for instance, converting from Strings to Atoms: >>> >>> new_map = %{ >>> foo: Map.fetch!(old_map, "foo"), >>> bar: Map.fetch!(old_map, "bar"), >>> ... >>> } >>> >>> or otherwise taking a Map from one part of the system and renaming keys >>> to make it work in another part of the system: >>> >>> new_map = %{ >>> user_id: post.author_id, >>> content: post.body, >>> ... >>> } >>> >>> With a Map.rename_key/3 function, we could instead write: >>> >>> new_map = >>> old_map >>> |> Map.rename_key("foo", :foo) >>> |> Map.rename_key("bar", :bar) >>> ... >>> >>> or: >>> >>> new_map = >>> post >>> |> Map.rename_key(:user_id, :author_id) >>> |> Map.rename_key(:body, :content) >>> ... >>> >>> In the situation that you're performing a bulk update of key names (as >>> seems to be implied above), Map.rename_keys/3 makes more sense: >>> >>> new_map = Map.rename_keys(old_map, %{"foo" => :foo, "bar" => :bar, ...}) >>> >>> or: >>> >>> new_map = Map.rename_keys(post, %{author_id: :user_id, body: :content, >>> ...}) >>> >>> With the Map.rename_key[s]/3 functions, the intent is very explicit, and >>> induces less cognitive load to understand. >>> >>> Renaming Map keys is a situation I run into at least monthly, and I do >>> wonder whether the rest of the community has this problem as well so as to >>> make it a worthwhile addition. >>> >>> -- >>> 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/70108df1-6c5e-475b-8dbd-b4222e920e0bo%40googlegroups.com >>> <https://groups.google.com/d/msgid/elixir-lang-core/70108df1-6c5e-475b-8dbd-b4222e920e0bo%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> >> >> -- >> Austin Ziegler • halos...@gmail.com • aus...@halostatue.ca >> http://www.halostatue.ca/ • http://twitter.com/halostatue >> > -- > 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/d6276452-1e72-4e79-9b25-614c69d7648an%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/d6276452-1e72-4e79-9b25-614c69d7648an%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Kurtis Rainbolt-Greene, Software Developer & Founder of Difference Engineers 202-643-2263 -- 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/CAMhJPGgq_wJw5QcdJaN1G2zh7X%2BY6pBFsV8HtShFqOuiUeL63g%40mail.gmail.com.