Elixir cung cấp một vài is_
chức năng cho phép bạn kiểm tra xem một mục là một loại hình cụ thể:Kiểm tra xem một giá trị là một danh sách từ khóa
is_atom
is_binary
is_map
- , vv
Nhưng làm cách nào để kiểm tra xem giá trị nào là một danh sách từ khóa trong Elixir? Tôi hiểu rằng bên dưới, danh sách từ khóa là một danh sách các hàng 2 phần tử với phần tử đầu tiên như một nguyên tử, vì vậy cách giải quyết hiện tại của tôi là thế này:
defmodule KList do
def is_keyword?(list) when is_list(list) do
Enum.all? list, fn item ->
case item do
{k, _} -> is_atom(k)
_ -> false
end
end
end
def is_keyword?(_), do: false
end
Có một tốt hơn (hoặc một trong xây dựng) cách làm điều này? Và quan trọng hơn, làm thế nào tôi có thể làm điều này trong một điều khoản when
?
Bạn sẽ không thể để kiểm tra một danh sách từ khóa trong một điều khoản bảo vệ. Có một danh sách các biểu thức được xác định trước được cho phép trong bảo vệ. Phần mở rộng duy nhất bạn được phép viết là các macro mở rộng đến các biểu thức được cho phép đó. http://elixir-lang.org/docs/master/elixir/guards – mario