通过Elixir中的结构类型从列表中获取元素

时间:2015-09-16 22:15:49

标签: elixir phoenix-framework

我有一张params地图,想要获取“" type"是%Plug.Upload{}。如何检查Elixir中的类型?

3 个答案:

答案 0 :(得分:4)

您可以像在地图上一样对结构进行模式匹配,这样您就可以使用Enum.filterKernel.match?

params
|> Enum.filter(&match?(%Plug.Upload{}, &1))

答案 1 :(得分:0)

params是一个映射,因此Enum.filter获取键/值对,并且该值将是Plug.Upload,因此:

params |> Enum.filter(fn({k, v}) -> match?(%Plug.Upload{}, v) end)

答案 2 :(得分:0)

您可以将模式%Plug.Upload{}for一起使用,因为for会跳过与传递的模式不匹配的所有项目。

这将返回地图params的值中包含的所有文件的列表:

for {_, %Plug.Upload{} = file} <- params, do: file

如果您只想对文件执行某些操作,可以将块传递给do

for {_, %Plug.Upload{} = file} <- params do
  IO.inspect file
end

如果您还想要访问已提交表单中的文件名,请将_更改为变量名。