2017-08-27 12 views
0

Mapで奇妙な問題が発生しました。Map.getが文字列キーで値を取得できません

  1. 「すぐに」:私は2つの奇妙な行動に気づい

    iex(1)> import Document 
    Document 
    iex(2)> Document.expiration_presets 
    %{"1-day": [days: 1], "1-hour": [hours: 1], "1-minute": [minutes: 1], 
    "1-month": [months: 1], "1-week": [weeks: 1], "1-year": [years: 1], 
    immediately: [seconds: 1], never: [years: 9999]} 
    iex(3)> Document.expiration_presets["1-hour"] 
    nil 
    iex(4)> Map.get(Document.expiration_presets, "1-hour") 
    nil 
    

    :我々は、マップから情報を取得しようとした場合

    defmodule Document do 
    
        @expiration_presets_to_timeshift %{ 
        "immediately": [seconds: 1], 
        "1-minute": [minutes: 1], 
        "1-hour": [hours: 1], 
        "1-day": [days: 1], 
        "1-week": [weeks: 1], 
        "1-month": [months: 1], 
        "1-year": [years: 1], 
        "never": [years: 9999], 
        } 
    
        def expiration_presets, do: @expiration_presets_to_timeshift 
    end 
    

    :ここでは、現象を再現するために、小さな例です「決して」キーは原子になっています。私は決してこれを求めなかった。どうして ?

  2. 私は(Map.get/2Map.[key]両方がnilを返す)、キーの文字列を使用して値を取得するように見えることはできません。それはなぜですか、そして、私はどのようにマップから値を取り出すことができますか?

答えて

2

文字列キーのマップ構文は次のようになります。

%{"immediately" => [seconds: 1]} 

は、最初にそのスタイルを使用するようにマップを更新します。

また、関数は:

def expiration_presets, do: @expiration_presets_to_timeshift 
+1

感謝が不足しています!私は 'key => value'と' atom:value'の区別に気づいていませんでした! – achedeuzot

関連する問題