maps string question

Roberto Ostinelli ostinelli@REDACTED
Wed Oct 13 23:24:24 CEST 2021


<<“key”>> is a binary, “key” is a list, so they are not the same. maps:get/2 raises because the key is not found. 

> string:equal(Key1, Key11).

The string representation for both is the same, hence this return true.

Hope this helps,
r.

> On 13 Oct 2021, at 23:05, Java House <java4dev@REDACTED> wrote:
> 
> 
> Hello
> I am having a problem with maps and strings as keys.
> My understanding that the the two string formats "string" and <<"string">> are identical but as you can see from the transcript bellow maps does not think so.
> I searched but I couldn't find any function to convert form "string" to <<"string">> or the other way around.
> How can I make maps to accept both format of strings?
> 
> Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]
> 
> Eshell V12.0  (abort with ^G)
> 1> Key1 = "key1".
> "key1"
> 2> 
> 2> Key11 = <<"key1">>.
> <<"key1">>
> 3> 
> 3> string:equal(Key1, Key11).
> true
> 4> 
> 4> Map = maps:new().
> #{}
> 5> 
> 5> Map1 = maps:put("key1", {something}, Map).
> #{"key1" => {something}}
> 6> 
> 6> maps:get(Key1, Map1).
> {something}
> 7> 
> 7> maps:get(Key11, Map1).
> ** exception error: bad key: <<"key1">>
>      in function  maps:get/2
>         called as maps:get(<<"key1">>,#{"key1" => {something}})
>         *** argument 2: not a map
> 8> 
> 8> maps:get("key1", Map1).
> {something}
> 9> 
> 9> maps:get(<<"key1">>, Map1).
> ** exception error: bad key: <<"key1">>
>      in function  maps:get/2
>         called as maps:get(<<"key1">>,#{"key1" => {something}})
>         *** argument 2: not a map
> 10> 
> 


More information about the erlang-questions mailing list