我有一张params
地图,想要获取“" type"是%Plug.Upload{}
。如何检查Elixir中的类型?
答案 0 :(得分:4)
您可以像在地图上一样对结构进行模式匹配,这样您就可以使用Enum.filter
和Kernel.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
如果您还想要访问已提交表单中的文件名,请将_
更改为变量名。