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