• 0

ما الفرق بين File.open و open و IO.foreach في روبي؟

أجد أنه لا فرق بين استخدام File.open و open و IO.foreach (أنظر للمثال) وهو فتح الملف و استدعاء الكتلة لكل سطر، فهل توجد أسباب لتفضيل استخدام واحدة عن أخريات؟
مثال:

File.open("file").each_line {|line| puts line}
open("file").each_line {|line| puts line}   
IO.foreach("file") {|line | puts line}

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

سأحاول شرح الفروقات الرئيسية باختصار:
أولا File.open("file").each_line { |line| puts line }، يقوم هذا الأمر بفتح ملف محلي وإرجاء ملف كائن، وبعد تنفيذ الأوامر الموجودة في السطر سيظل الملف مفتوح حتى تغلقه أنت بنفسك.
وبالنسبة إلى open("file").each_line { |line| puts line } فهو يشبه السطر السابق من ناحية بقاء الملف مفتوح، لكن الفرق البسيط الذي بينه وبين السطر السابق أنه يدعم كائن StringIO، ولفهم هذه النقطة أكثر أنصحك بالنظر إلى هذا المثال:

open(".irbrc").class # => File
open("http://google.com/").class # => StringIO
File.open("http://google.com/") # => Errno::ENOENT: No such file or directory - http://google.com/

أما IO.foreach("file") { |line| puts line } فهي تفتح الملف وتنفّذ الأوامر الموجودة في الكتلة على كل الأسطر ومن ثم تغلق الملف بعد الانتهاء من تنفيذ الأوامر.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن