IO

IO في Elixir

1 تمرين

نبذة عن IO

الدوال الخاصة بمعالجة الإدخال والإخراج توفّرها وحدة IO.

  • IO.puts/2 تكتب سلسلة نصية إلى المخرج القياسي، متبوعةً بسطر جديد، وتُرجع :ok.
  • IO.write/2 تكتب سلسلة نصية إلى المخرج القياسي دون إضافة سطر جديد، وتُرجع :ok.
  • IO.gets/2 تقرأ سطرًا من المدخل القياسي.
  • IO.inspect/2 تكتب أي شيء إلى المخرج القياسي، وتقبل خيارات مفيدة مثل :label. وتُرجع القيمة التي مُرّرت إليها دون تغيير. وهي مفيدة في تصحيح الأخطاء.

بروتوكول String.Chars

إذا حاولت تمرير قيمة لا تستطيع IO.puts/2 طباعتها، فسترى خطأ Protocol.UndefinedError.

IO.puts({:ok, 7})
# ** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, 7} of type Tuple

عندما يحدث ذلك، قد ترغب في استخدام IO.inspect/2 بدلًا من ذلك.

استخدام IO.inspect/2 في تصحيح الأخطاء

IO.inspect/2 مثالية لتصحيح الأخطاء لأنها تُرجع وسيطها دون تغيير، وتستطيع طباعة أي شيء، وتتيح خيار :label.

"HELLO\n"
|> String.trim()
|> IO.inspect(label: "step 1")
|> String.downcase()
|> IO.inspect(label: "step 2")

# > step 1: "HELLO"
# > step 2: "hello"
# => "hello"

أجهزة IO

الوسيط الأول في كل تلك الدوال هو جهاز IO، وقيمته الافتراضية :stdio (المدخل/المخرج القياسي). وللكتابة إلى جهاز الخطأ القياسي، استخدم :stderr بدلًا منه. ويمكن أن يكون جهاز IO أيضًا عملية، مثل عملية تُنشأ باستدعاء File.open/2، ما يسمح بالكتابة إلى ملف.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم IO