اذهب إلى المحتوى

السؤال

نشر

أجد أنه لا فرق بين استخدام 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}

Recommended Posts

  • 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 } فهي تفتح الملف وتنفّذ الأوامر الموجودة في الكتلة على كل الأسطر ومن ثم تغلق الملف بعد الانتهاء من تنفيذ الأوامر.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...