get_in在灵药

问题描述:

嵌套列表与结构我有一个结构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

由于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"