如何獲取列表的類型。如果列表是proplist,我想執行代碼。 讓我們說L = [a,1,b,2,c,3, ...]
。在列表L,我將其轉換成proplist這樣像erlang中的is_proplist?
L = [{a,1}, {b,2}, {c,3}, ...].
如何確定列表是否是一個proplist變種? erlang:is_list/1
對我無用。
如何獲取列表的類型。如果列表是proplist,我想執行代碼。 讓我們說L = [a,1,b,2,c,3, ...]
。在列表L,我將其轉換成proplist這樣像erlang中的is_proplist?
L = [{a,1}, {b,2}, {c,3}, ...].
如何確定列表是否是一個proplist變種? erlang:is_list/1
對我無用。
您可以使用類似:
is_proplist([]) -> true;
is_proplist([{K,_}|L]) when is_atom(K) -> is_proplist(L);
is_proplist(_) -> false.
,但需要考慮該功能不能在後衛使用。
你需要檢查列表中的每個元素是否是兩個元素的元組。可與lists:all/2做到:
is_proplist(List) ->
is_list(List) andalso
lists:all(fun({_, _}) -> true;
(_) -> false
end,
List).
這取決於「proplist變種」的定義,您使用的,當然。以上是什麼通常通過「proplist變種」的意思,但the documentation for the proplists module說:
屬性列表是包含在任一元組,其第一元素是用於查找和插入,或原子鍵的形式條目普通列表,其中的元組簡寫爲
{Atom, true}
。
然後你需要一個單個原子的子句作爲有效的proplist元素。 –
列出像'[a]'和'[a,b]'也應該被視爲proplists。 – Ning
鍵也不一定是原子,也可以是二進制,字符串/列表。 '[{}}的列表,{<<"OMG">>,omg}]'將會失敗 – matov