2016-07-13 8 views
1

データを抽出するためのベストプラクティス我々は、それはリストが含まれている場合、それはまたエリクサー:ネストされた構造体からエリクサーで

data = %{field: %{other_field: [1]}} 
get_in data, [:field, :other_field, Access.at(0)] 

を使用して行わしかし、どのようにすることができ

data = %{field: %{other_field: 1}} 
data[:field][:other_field] 

を使用して、ネストしたデータ構造からデータを取得することができますdata.field.other_fieldが構造体であると仮定してそのデータを取得するには? 構造体にAccess.fetch/2が実装されていないため、上記の両方が失敗します。

data = %{field: %{other_field: %Struct{a: 1}}} 

パターンマッチング以外のネストされた構造体データにアクセスするにはどうすればよいでしょうか?

答えて

3

使用Access.key/2

キー(キー、デフォルト\\ nilは)

マップ/構造体で指定されたキーにアクセスします。

キーが存在しない場合、またはアクセスする値がnilの場合は、デフォルト値を使用します。

iex(1)> defmodule Struct do 
...(1)> defstruct [:a] 
...(1)> end 
iex(2)> data = %{field: %{other_field: %Struct{a: 1}}} 
%{field: %{other_field: %Struct{a: 1}}} 
iex(3)> get_in data, [:field, :other_field, Access.key(:a)] 
1 
iex(4)> get_in data, [:field, :other_field, Access.key(:b, :default)] 
:default 
関連する問題