لفهم كيفية مطابقة أنماط (Pattern Matching) على مفاتيح الخريطة في رؤوس الدوال في Elixir، يجب عليك استخدام الرمز ^
مع المتغير الذي تريد مطابقته. ومن المهم أيضًا أن تكون قد أعطيت القيمة المراد مطابقتها للمتغير key
من خلال استدعاء الدالة باستخدام my_func(key, map)
.
يمكنك تعديل كودك كالتالي:
elixirdef my_func(key, %{^key => _} = map), do: IO.puts("Key #{inspect(key)} exists in map") def my_func(key, map), do: IO.puts("Key #{inspect(key)} does not exist in map") # استدعاء الدالة key = :foo map = %{foo: "bar", baz: "qux"} my_func(key, map)
في هذا المثال، سيتم طباعة “Key :foo exists in map” لأن المفتاح :foo
موجود في الخريطة. في حالة عدم وجود المفتاح، ستطبع “Key :foo does not exist in map”.
يرجى ملاحظة أن استخدام ^
يعني أن القيمة المراد مطابقتها معروفة مسبقًا وليس غير معروفة كما هو الحال في المطابقة العادية.
المزيد من المعلومات
للتوضيح، في Elixir، يمكنك استخدام الرمز ^
للإشارة إلى أن المتغير المستخدم في المطابقة (pattern) يجب أن يكون محددًا مسبقًا. يجب عليك توفير قيمة للمتغير key
عند استدعاء الدالة my_func(key, map)
حتى يتم تحديد المفتاح الذي تريد مطابقته.
في الكود الخاص بك، يمكنك تحديد المفتاح الذي تريد مطابقته عند استدعاء الدالة my_func(key, map)
، كما هو موضح في المثال التالي:
elixirdefmodule MyModule do def my_func(key, %{^key => _} = map), do: IO.puts("Key #{inspect(key)} exists in map") def my_func(key, map), do: IO.puts("Key #{inspect(key)} does not exist in map") end # استدعاء الدالة key = :foo map = %{foo: "bar", baz: "qux"} MyModule.my_func(key, map)
هذا سيسمح لك بتحديد المفتاح الذي تريد مطابقته عند استدعاء الدالة، وسيتم تحديد ما إذا كان المفتاح موجودًا في الخريطة أم لا.