2016-05-04 3 views

答えて

9

使用Kernel.get_in/2掘ります。マップと構造体の両方で動作する何かを作るために、あなたはそれを自分で行う必要があります。

def dig(nil, _), do: nil 
def dig(struct, []), do: struct 
def dig(struct, [head | tail]) do 
    struct 
    |> Map.get(head) 
    |> dig(tail) 
end 


> m = %{foo: %{bar: %{baz: 1}}} 
> dig m, [:foo, :bar, :baz] 
1 
> dig m, [:foo, :zot] 
nil 
> dig m, [:foo, :zot, :qux] 
nil 
1

get_inはマップと正常に動作します:

Rubyは例

h = { foo: {bar: {baz: 1}}} 

h.dig(:foo, :bar, :baz)   #=> 1 
h.dig(:foo, :zot)     #=> nil 
関連する問題