在Elixir我可以檢查一個變量是map
還是struct
,通過調用Kernel.is_map/1
這是有道理的,因爲Structs are Maps underneath,但我想區分這兩者。我知道我可以調用__struct__
在一個結構來獲得它的模塊名稱,但稱這是一個正常的地圖上拋出:如何檢查Map是否也是Struct?
** (KeyError) key :__struct__ not found in: %{}
所以我的問題是,如何檢查,如果一個變量是地圖或結構?
示例使用情形:
# I want to handle struct and map inputs differently in my Module
defmodule DifferentThings do
def do_something(arg) when is_map(arg) do
# Do something with Maps
end
def do_something(arg) when is_struct(arg) do
# But handle Structs differently
# Issue is, `is_struct` does not exist
end
end
這不會在後臺工作 –
如果你需要模式匹配,可以使用'%{__ struct__:_} = struct' –