TheBrain نشر 7 ديسمبر 2015 أرسل تقرير مشاركة نشر 7 ديسمبر 2015 أجد أنه لا فرق بين استخدام 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} اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 هشام رزق الله نشر 7 ديسمبر 2015 أرسل تقرير مشاركة نشر 7 ديسمبر 2015 سأحاول شرح الفروقات الرئيسية باختصار:أولا 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 } فهي تفتح الملف وتنفّذ الأوامر الموجودة في الكتلة على كل الأسطر ومن ثم تغلق الملف بعد الانتهاء من تنفيذ الأوامر. اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
TheBrain
أجد أنه لا فرق بين استخدام File.open و open و IO.foreach (أنظر للمثال) وهو فتح الملف و استدعاء الكتلة لكل سطر، فهل توجد أسباب لتفضيل استخدام واحدة عن أخريات؟
مثال:
رابط هذا التعليق
شارك على الشبكات الإجتماعية
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.