I think it can pretty much be substituted with `data[key] || 
expensive_fun()`, can it not? (apart from the case when key actually points 
to `nil` value)

The only benefit of this added function I see is improved readability when 
piping, but it's still possible to do without it:
```
iex(1)> data = %{a: 3}
%{a: 3}
iex(2)> data[:a]
3
iex(3)> |> Kernel.||(:rand.uniform)
3
iex(4)> data[:b]
nil
iex(5)> |> Kernel.||(:rand.uniform)
0.764306455162276
```

On Wednesday 31 July 2024 at 8:28:04 pm UTC+2 José Valim wrote:

> I see. It seems to be a narrow use case for now, so I think Access.fetch/2 
> is the way to go until we get more evidence that many folks need something 
> similar. My impression is that the direct Access functions are not that 
> commonly used in general. :)
>
> On Wed, Jul 31, 2024 at 8:23 PM Tobias Pfeiffer <pra...@gmail.com> wrote:
>
>> Heyo José,
>>
>> in most cases it's just a helper method with optional args - which I like 
>> to keep in a way that users of it can user either a map or keyword args.
>>
>> In this particular case it was this helper for tests:
>>
>> @supply_tag 744_306
>> def my_helper(opts \\ []) do
>> query_string = Keyword.get_lazy(opts, :query_string, &build_query_string/
>> 0)
>> supply_tag = Access.get(opts, :supply_tag, @supply_tag)
>> ip = Access.get(opts, :ip, "68.235.110.20")
>>
>> "https://some.url#{supply_tag}#{query_string}&ip=#{ip}";
>> end
>>
>> build_query_string/0 takes some time but not a lot - but it could also 
>> take more time aka the classical get_lazy/3 use case.
>>
>> Using Keyword.get_lazy/3 here works but limits callers to use keywords 
>> (or do a Map to Keyword conversion) which limits the usefulness of `Access` 
>> to me - as I tend to prefer to use it when both maps and keyword lists seem 
>> acceptable.
>>
>> Cheers + thanks,
>> Tobi
>> On Wed, Jul 31, 2024 at 8:39 AM José Valim <jose....@dashbit.co> wrote:
>>
>>> Hi Tobi, can you provide some context of how it would be used, code 
>>> wise? Which problem are you facing?
>>>
>>> On Wed, Jul 31, 2024 at 08:10 Tobias Pfeiffer <pra...@gmail.com> wrote:
>>>
>>>> Hello beloved core team,
>>>>
>>>> TLDR; Should we have Access.get_lazy/3 ?
>>>>
>>>> As usual I'm sure there is some reason why this doesn't exist yet but I 
>>>> don't know so here is the question/proposal:
>>>>
>>>> We have Map.get_lazy/3 and Keyword.get_lazy/3 - they're amazing and 
>>>> helpful. Access basically encapsulates the 2 and I generally use it where 
>>>> I 
>>>> can to allow both Keywords and Maps - most commonly when I deal with 
>>>> options. It doesn't have get_lazy/3 though, which sometimes makes me fall 
>>>> back to either Map or Keyword (or wrap it myself).
>>>>
>>>> Using Access.fetch/2 it should also be easy to implement.
>>>>
>>>> So, would a PR implementing Access.get_lazy/3 be considered?
>>>>
>>>> Thanks!
>>>> Tobi
>>>>
>>>> -- 
>>>> 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/CAG3Z5YQYuv8SF81vs8UNhtpGN3wA0NHgH1yFhixuwoQmV2S8eQ%40mail.gmail.com
>>>>  
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YQYuv8SF81vs8UNhtpGN3wA0NHgH1yFhixuwoQmV2S8eQ%40mail.gmail.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-co...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L6popY-tMX54mKh3kc_cbmYRa7G7G0Em64ZPUoZEX6Lw%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L6popY-tMX54mKh3kc_cbmYRa7G7G0Em64ZPUoZEX6Lw%40mail.gmail.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-co...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YTOA%2Buditq5jfHETFNanUwT_fXsnjt-S%2BnekqCJcp_20A%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YTOA%2Buditq5jfHETFNanUwT_fXsnjt-S%2BnekqCJcp_20A%40mail.gmail.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/813bfaf3-059f-4890-b82e-2af35c7720f4n%40googlegroups.com.

Reply via email to