2016-10-04 65 views
1

嵌套列表與結構我有一個結構get_in在靈藥

s = [ 
    a: %Bla{ 
    b: "c" 
    } 
] 

我想從它採取c值。我正在嘗試做

get_in(s, [:a, :b]) 

但它的目的不是爲了從結構中獲取價值。有沒有什麼模擬可以讓我從嵌套結構的列表中獲取c

+0

'get_in(S,[:一,:B])#=> 「C」'我。 – Dogbert

+0

廢話!讓我調查爲什麼它不能在我身邊 – asiniy

+0

@Dogbert更新了這個問題。結構很重要! – asiniy

回答

3

由於documentedget_in默認情況下不與結構的工作:

的Access語法(富[巴])不能被用來在結構接入領域,由於結構不實現默認訪問行爲。這也是設計決策:動態訪問查找用於動態鍵值結構,如地圖和關鍵字,而不是像結構體那樣的靜態鍵值結構。

有兩種方法可以實現你想要什麼:

  1. 實現Access協議的結構。使用Access.key(:foo)代替:foo

我會使用(2):

iex(1)> defmodule Bla do 
...(1)> defstruct [:b] 
...(1)> end 
iex(2)> s = [a: %Bla{b: "c"}] 
[a: %Bla{b: "c"}] 
iex(3)> get_in(s, [:a, Access.key(:b)]) 
"c"