الفرق بين المراجعتين ل"Ruby/IO/new"

من موسوعة حسوب
< Ruby‏ | IO
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>new‎</code> الخاص بالصنف <code>IO</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Rub...')
 
ط (مراجعة وتدقيق.)
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>new‎</code> الخاص بالصنف <code>IO</code> في روبي}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: التابع <code>IO.new‎</code> في روبي}}</noinclude>
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby IO]]
 
[[تصنيف: Ruby IO]]
يُعيد التابع <code>new</code> كائنًا جديدًا من النوع <code>[[Ruby/IO|IO]]</code> لواصف الملف (file descriptor) المعطى <code>fd</code> (انظر فقرة البنية العامة) والوضع <code>mode</code>.  يمكن استخدام <code>opt</code> لتحديد أجزاء من <code>mode</code> بطريقة أكثر قابلية للقراءة.  انظر أيضًا صفحتي <code>[[Ruby/IO/sysopen|::sysopen]]</code> و <code>[[Ruby/IO/for_fd|::for_fd]]</code>.
+
ينشئ التابع <code>new</code> كائنًا جديدًا من النوع <code>[[Ruby/IO|IO]]</code> انطلاقًا من واصف الملف (file descriptor) ووضع الفتح الممرَّرين إليه.
  
يُستدعى التابع <code>[[Ruby/IO/new|::new]]</code> عبر العديد من توابع الفتح الخاصة بالصنفين <code>[[Ruby/File|File]]</code> و <code>[[Ruby/IO|IO]]</code>، مثل <code>[[Ruby/IO/open|::open]]</code> و <code>[[Ruby/Kernel/open|Kernel#open]]</code> و <code>[[Ruby/File/open|File.open]]</code>.
+
يُستدعَى التابع <code>new</code> عبر العديد من توابع الفتح الخاصة بالصنفين <code>[[Ruby/File|File]]</code> و <code>[[Ruby/IO|IO]]</code>، مثل <code>[[Ruby/IO/open|open]]</code> و <code>[[Ruby/Kernel/open|Kernel.open]]</code> و <code>[[Ruby/File/open|File.open]]</code>.
 +
==البنية العامة==
 +
<syntaxhighlight lang="ruby">new(fd [, mode] [, opt])→ io‎</syntaxhighlight>
 +
==المعاملات==
 +
===<code>fd‎</code>===
 +
واصف الملف المراد فتحه.
  
وضع الفتح (Open Mode)
+
===<code>mode‎</code>===
<code>[[Ruby//new-label-Open+Mode|¶]]</code> <code>[[Ruby//top|↑]]</code>
+
وضع الفتح الذي يحدد الكيفية والغرض من فتح الملف ذي الواصف <code>fd</code>.
  
إن كان الوسيط <code>mode</code> عددًا صحيحًا، فيجب أن يكون مزيجًا من الأوضاع المعرف في <code>[[Ruby/Constants|File::Constants]]</code>‏ (<code>File::RDONLY</code>، <code>File::WRONLY|File::CREAT</code>). انظر صفحة open(2)‎ لمزيد من المعلومات.
+
==== وضع الفتح (Open Mode) ====
 +
إن كان المعامل <code>mode</code> عددًا صحيحًا، فيجب أن يكون مزيجًا من الأوضاع المعرفة في <code>[[Ruby/File::Constants|File::Constants]]</code>‏ (مثل <code>File::RDONLY</code>، أو <code>File::WRONLY|File::CREAT</code>). انظر صفحة <code>open(2)‎</code> لمزيد من المعلومات.
  
إن كان <code>mode</code> عبارة عن [[Ruby/String|سلسلة نصية]]، فيجب أن يكون وفق أحد الصيغ التالية:
+
إن كان <code>mode</code> [[Ruby/String|سلسلة نصية]]، فيجب أن يكون وفق أحد الصيغ التالية:<syntaxhighlight lang="ruby">fmode
 
 
<syntaxhighlight lang="ruby">fmode
 
 
fmode ":" ext_enc
 
fmode ":" ext_enc
 
fmode ":" ext_enc ":" int_enc
 
fmode ":" ext_enc ":" int_enc
fmode ":" "BOM|UTF-*"‎</syntaxhighlight>
+
fmode ":" "BOM|UTF-*"‎</syntaxhighlight><code>fmode</code> هو سلسلة نصية تمثل وضعية فتح (open mode) المجرى <code>[[Ruby/IO|IO]]</code>، فيما يمثل <code>ext_enc</code> الترميز الخارجي للمجرى، ويمثل <code>int_enc</code> الترميز الداخلي.
  
<code>fmode</code> هو عبارة عن وضعية فتح (open mode) [[Ruby/IO|التابع الحر]] (<code>[[Ruby/IO|IO]]</code>X)، فيما يمثل <code>ext_enc</code> الترميز الخارجي [[Ruby/IO|التابع الحر]] <code>[[Ruby/IO|IO]]</code> ويمثل <code>int_enc</code> الترميز الداخلي.
+
==== وضعية الفتح الخاصة <code rel="mw:WikiLink" href="./Ruby/IO" title="Ruby/IO">[[Ruby/IO|IO]]</code> ====
 +
تتيح روبي أوضاع الفتح التالية:
 +
* "<code>r</code>": القراءة فقط، بدءًا من بداية الملف (الوضع الافتراضي).
 +
* "<code>+r</code>": القراءة والكتابة، بدءًا من بداية الملف.
 +
* "<code>w</code>":  الكتابة فقط مع إنشاء واحد جديد للكتابة فيه. ستُمسَح محتويات الملف إن كان موجودًا مسبقًا.
 +
* "<code>w+</code>‎": الكتابة والقراءة مع إنشاء واحد جديد للكتابة فيه والقراءة منه. ستُمسَح محتويات الملف إن كان موجودًا مسبقًا.
 +
* "<code>a</code>": الكتابة فقط مع إنشاء ملف جديد لأجل الكتابة إن لم يكن موجودًا؛ كل عملية كتابة ستضيف بيانات إلى نهاية الملف.
 +
* "<code>a+‎</code>": الكتابة والقراءة مع إنشاء ملف جديد لأجل الكتابة إن لم يكن موجودًا؛ كل عملية كتابة ستضيف بيانات إلى نهاية الملف.
 +
يجب استخدام الأوضاع التالية بشكل منفصل، بالإضافة إلى واحد أو أكثر من الأوضاع التي ذُكرت آنفًا:
 +
* "<code>b</code>":  الوضع الثنائي (Binary file mode). يمنع تحويل المحارف <code>EOL</code> <-> <code>CRLF</code> في نظام ويندوز. ويعين الترميز الخارجي إلى القيمة ASCII-8BIT، إلا إن حُدد ترميز آخر.
 +
* "<code>t</code>":  الوضع النصي (Text file mode).
 +
'''ملاحظة''': عندما يكون وضع فتح المجرى الأصلي هو القراءة فقط (read only)، فلن يكون بالإمكان تغيير الوضع لجعله قابلًا للكتابة. وبالمثل، لا يمكن تغيير وضع الفتح من الكتابة إلى القراءة فقط. عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة بحسب للنظام المستخدم.
  
وضعية الفتح الخاصة ب[[Ruby/IO|التابع الحر]] (<code>[[Ruby/IO|IO]]</code> Open Mode)
+
==== ترميز المجرى <code rel="mw:WikiLink" href="./Ruby/IO" title="Ruby/IO">[[Ruby/IO|IO]]</code> ====
<code>[[Ruby//new-label-IO+Open+Mode|]]</code> <code>[[Ruby//top|]]</code>
+
عند تحديد الترميز <code>ext_enc</code>، سيتم وسم [[Ruby/String|السلاسل النصية]] بذلك الترميز عند القراءة، وستُحوّل [[Ruby/String|السلاسل النصية]] المُخرجة إلى الترميز المحدد عند الكتابة.
  
تتيح روبي وضعيا الفتح التالية:
+
عند تحديد الترميزين <code>ext_enc</code> و <code>int_enc</code> سيتم تحويل [[Ruby/String|السلاسل النصية]] المقروءة من <code>ext_enc</code> إلى <code>int_enc</code> عند الإدخال، كما سيتم تحويل [[Ruby/String|السلاسل النصية]] المكتوبة من <code>int_enc</code> إلى <code>ext_enc</code> عند الإخراج. راجع صفحة <code>[[Ruby/Encoding|Encoding]]</code> لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات.
  
<syntaxhighlight lang="ruby">"r"  Read-only, starts at beginning of file  (default mode).
+
في حال استخدام أحد الترميزات "<code>BOM | UTF-8</code>" أو "<code>BOM | UTF-16LE</code>" أو "<code>BOM | UTF16-BE</code>"، ستتحقق روبي من <code>BOM</code> لترميز اليونيكود في مستند الإدخال لأجل تحديد الترميز بشكل صحيح. بالنسبة للترميز <code>UTF-16</code>، يجب أن تكون وضعية فتح الملف ثنائية (binary). آنذاك، يُحذف <code>BOM</code>، ويُستخدم الترميز الخارجي المُستنتَج من <code>BOM</code>. أما عند عدم وجود <code>BOM</code>، فسيتم استخدام ترميز اليونيكود المعطى باعتباره الترميز الخارجي <code>ext_enc</code>. (خيار ضبط الترميز مع BOM غير حساس لحالة الأحرف، ما يجعل "<code>bom | utf-8</code>" صالحًا أيضًا.)
"r+" Read-write, starts at beginning of file.
 
"w"  Write-only, truncates existing file
 
    to zero length or creates a new file for writing.
 
"w+" Read-write, truncates existing file to zero length
 
    or creates a new file for reading and writing.
 
"a"  Write-only, each write call appends data at end of file.
 
    Creates a new file for writing if file does not exist.
 
"a+" Read-write, each write call appends data at end of file.
 
    Creates a new file for reading and writing if file does
 
    not exist.‎</syntaxhighlight>
 
  
يجب استخدام الأوضاع التالية بشكل منفصل، بالإضافة إلى واحد أو أكثر من الأوضاع المذكورة أعلاه.
+
===<code>opt‎</code>===
 +
يمكن استخدام هذا المعامل لتحديد أجزاء من الوضع <code>mode</code> بطريقة أكثر قابلية للقراءة.
  
<syntaxhighlight lang="ruby">"b"  Binary file mode
+
المفاتيح التالية متاحة لاستعمالها مع هذا المعامل:
    Suppresses EOL <-> CRLF conversion on Windows. And
+
* <code>mode:</code>: مثل المعامل <code>mode</code>.
    sets external encoding to ASCII-8BIT unless explicitly
 
    specified.
 
"t"  Text file mode‎</syntaxhighlight>
 
  
عندما تكون وضعية فتح (open mode) [[Ruby/IO|التابع الحر]] الأصلي (<code>[[Ruby/IO|IO]]</code>) هي القراءة فقط (read onlyلا يمكن تغيير الوضع لجعله قابلا للكتابة. وبالمثل، لا يمكن تغيير وضعية الفتح من الكتابة إلى القراءة فقط.
+
* <code>flags:</code>: يحدد رايات فتح الملف على هيئة عدد صحيح. في حال إعطاء المعامل <code>mode</code>، فسيتم جمع هذا المعامل مع المعامل <code>mode</code> باستخدام العملية OR الثنائية.
 +
* <code>external_encoding</code>: الترميز الخارجي للمجرى <code>[[Ruby/IO|IO]]</code>.
 +
* <code>internal_encoding</code>: الترميز الداخلي للمجرى <code>[[Ruby/IO|IO]]</code>. العلامة "<code>-</code>" هي مرادف للترميز الداخلي الافتراضي. إن كانت قيمة هذا المفتاح تساوي <code>nil</code>، فلن يحدث أي تحويل.
 +
* <code>encoding</code>: يحدد الترميزين الخارجي والداخلي وفقًا للشكل "<code>extern:intern</code>".
 +
* <code>textmode</code>: إن كانت القيمة قيمةً صحيحةً (truth value)، فسيكون مثل الوضع "<code>t</code>" في المعامل <code>mode</code>.
 +
* <code>binmode</code>: إن كانت القيمة قيمةً صحيحةً (truth valueفسيكون مثل الوضع "<code>b</code>" في المعامل <code>mode</code>.
 +
* <code>autoclose</code>: إن كانت قيمته تساوي <code>false</code>، فسيبقى <code>fd</code> مفتوحًا بعد إنهاء المجرى <code>[[Ruby/IO|IO]]</code>.
 +
أيضًا، يمكن أن يكون للمعامل <code>opt</code> نفس مفاتيح التابع <code>[[Ruby/String/encode|String.encode]]</code> للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي.
 +
==القيمة المعادة==
 +
يعاد كائن جديد من النوع <code>[[Ruby/IO|IO]]</code>.
  
عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة وفقًا للنظام المستخدم.
+
==أمثلة==
 
+
مثال على استعمال التابع <code>new</code> بأبسط شكل له:<syntaxhighlight lang="ruby">fd = IO.sysopen("/dev/tty", "w")
ترميز [[Ruby/IO|التابع الحر]] (<code>[[Ruby/IO|IO]]</code> <code>[[Ruby/Encoding|Encoding]]</code>)
+
a = IO.new(fd,"w")
<code>[[Ruby//new-label-IO+Encoding|¶]]</code> <code>[[Ruby//top|↑]]</code>
+
$stderr.puts "Hello"
 
+
a.puts "World"‎</syntaxhighlight>الناتج:<syntaxhighlight lang="text">Hello
عند تحديد <code>ext_enc</code>، سيتم وسم [[Ruby/String|السلاسل النصية]] بواسطة الترميز عند القراءة، وستُحوّل [[Ruby/String|السلاسل النصية]] المُخرجة إلى الترميز المحدد عند الكتابة.
+
World</syntaxhighlight>مثال على استعمال التابع <code>new</code> مع تحديد المعامل <code>mode</code> والمعامل <code>opt</code>:<syntaxhighlight lang="ruby">require 'fcntl'
 
 
عند تحديد <code>ext_enc</code> و <code>int_enc</code> سيتم تحويل [[Ruby/String|السلاسل النصية]] المقروءة من <code>ext_enc</code> إلى <code>int_enc</code> عند الإدخال، كما سيتم تحويل [[Ruby/String|السلاسل النصية]] المكتوبة من <code>int_enc</code> إلى <code>ext_enc</code> عند الإخراج.  راجع صفحة <code>[[Ruby/Encoding|Encoding]]</code> لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات.
 
 
 
في حال استخدام الترميزات "BOM | UTF-8" أو "BOM | UTF-16LE" أو "BOM | UTF16-BE"، ستتحقق روبي من محرف اليونيكود BOM في مستند الإدخال لأجل تحديد الترميز.  بالنسبة للترميز UTF-16، يجب أن تكون وضعية فتح الملف ثنائية (binary). عند وجوده، يتم تجريد المحرف BOM، ويُستخدم الترميز الخارجي المُستنتج من المحرف BOM.  عند عدم إيجاد المحرف BOM، فسيتم استخدام ترميز اليونيكود المعطى ياعتباره <code>ext_enc</code>.  (خيار الترميز BOM غير حساس لحالة الأحرف، بحيث تكون "bom | utf-8" صالحة أيضًا.)
 
 
 
خيارات
 
<code>[[Ruby//new-label-Options|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
يمكن استخدام <code>opt</code> بدلاً من <code>mode</code> لتحسين قابلية القراءة.  المفاتيح التالية مدعومة:
 
 
 
:mode
 
 
 
مثل الوسيط <code>mode</code>
 
 
 
:flags
 
 
 
يحدد رايات فتح الملف على هيئة عدد صحيح. في حال إعطاء الوسيط <code>mode</code>، فسيتم تحديد هذا الوسيط باستخدام عملية "أو الثنائية" (bitwise-OR).
 
 
 
:external_encoding
 
 
 
الترميز الخارجي ل[[Ruby/IO|مجرى د/خ]] <code>[[Ruby/IO|IO]]</code>.
 
 
 
: internal_encoding
 
 
 
الترميز الداخلي ل[[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code>). العلامة "-" هي مرادف للترميز الداخلي الافتراضي.
 
 
 
إن كانت قيمته تساوي <code>nil</code>، فلن يحدث أي تحويل.
 
 
 
:encoding
 
 
 
يحدد الترميزات الخارجية والداخلية على هيئة "extern: intern".
 
 
 
:textmode
 
  
إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "t" في الوسيط <code>mode</code>.
+
fd = STDERR.fcntl(Fcntl::F_DUPFD)
 +
io = IO.new(fd, mode: 'w:UTF-16LE', cr_newline: true)
 +
io.puts "Hello, World!"
  
: binmode
+
fd = STDERR.fcntl(Fcntl::F_DUPFD)
 +
io = IO.new(fd, mode: 'w', cr_newline: true,
 +
            external_encoding: Encoding::UTF_16LE)
 +
io.puts "Hello, World!"</syntaxhighlight>كلا المثالين أعلاه يطبعان "<code>Hello, World!‎</code>" وفق الترميز <code>UTF-16LE</code> في مجرى الخطأ القياسي، مع تحويل المحرف <code>EOL</code> الذي تم إنشاؤها من قبل <code>[[Ruby/IO/puts|puts]]</code> إلى المحرف <code>CR</code>.
  
إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "b" في الوسيط <code>mode</code>.
+
==انظر أيضًا==
 
+
*التابع <code>[[Ruby/IO/open|open]]</code>: يشبه التابعَ <code>new</code> تمامًا عند استدعائه دون كتلة، أو يُمرّر الكائن <code>IO</code> الذي جرى إنشاؤه كوسيط إلى الكتلة المعطاة ثم يعيد الناتج الذي تعيده الكتلة.  
:autoclose
+
*التابع <code>[[Ruby/IO/sysopen|sysopen]]</code>: يفتح الملف الموجود في المسار المحدد، ثم يعيد واصف الملف الأساسي <nowiki/>[[Ruby/Integer|كعدد صحيح]].  
 
+
*التابع <code>[[Ruby/IO/for fd|for_fd]]</code>: يعد مرادفًا للتابع <code>new</code>.  
إن كانت قيمته تساوي <code>false</code>، فسيبقى <code>fd</code> مفتوحا بعد انتهاء [[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code>).
 
 
 
أيضا، يمكن أن يكون للوسيط <code>opt</code> نفس مفاتيح التابع <code>[[Ruby/String/encode|String#encode]]</code> للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي.
 
 
 
مثال 1
 
<code>[[Ruby//new-label-Example+1|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
 
 
 
 
الناتج:
 
 
 
 
 
 
 
مثال 2
 
<code>[[Ruby//new-label-Example+2|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
 
 
 
 
كلا المثالين أعلاه من يطبعان "Hello, World!" وفق الترميز UTF-16LE في مجرى إخراج الخطأ القياسي مع تحويل المحرف EOL التي تم إنشاؤها بواسطة <code>[[Ruby/IO/puts|puts]]</code> إلى CR.
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">new(fd [, mode] [, opt])→ io‎</syntaxhighlight>
 
==المعاملات==
 
===<code>fd‎</code>===
 
===<code>mode‎</code>===
 
===<code>opt‎</code>===
 
==القيمة المُعادة==
 
==أمثلة==
 
مثال على استخدام التابع <code>new‎</code>:
 
<syntaxhighlight lang="ruby">fd = IO.sysopen("/dev/tty", "w")
 
a = IO.new(fd,"w")
 
$stderr.puts "Hello"
 
a.puts "World"‎</syntaxhighlight>
 
==انظر أيضا==
 
* التابع <code>[[Ruby/IO/foreach|foreach]]</code>: ينفذ التابع <code>foreach</code> الكتلة المعطاة على كل سطر في منفذ [[Ruby/IO|مجرى د/خ]] المسمى، حيث يتم فصل الأسطر بواسطة <code>sep</code>.
 
* التابع <code>[[Ruby/IO/open|open]]</code>: عند عدم تمرير كتلة، فسيكون التابع <code>IO.open</code> مرادفاً للتابع <code>[[Ruby/IO/new|::new]]</code>.  أما في حال تمرير الكتلة البرمجية، فسيُمرّر إليها <code>io</code> (انظر فقرة البنية العامة) كوسيط، وسيتم إغلاق [[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code>) تلقائيًا عند إنهاء الكتلة. في هذه الحالة، سيعيد التابع <code>[[Ruby/IO/open|::open]]</code> قيمة الكتلة.
 
 
==مصادر==
 
==مصادر==
*[http://ruby-doc.org/core-2.5.1/IO.html#method-c-new قسم التابع new‎ في الصنف IO‎ في توثيق روبي الرسمي.]
+
*[http://ruby-doc.org/core-2.5.1/IO.html#method-c-new قسم التابع new‎ في الصنف IO‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 14:02، 19 ديسمبر 2018

ينشئ التابع new كائنًا جديدًا من النوع IO انطلاقًا من واصف الملف (file descriptor) ووضع الفتح الممرَّرين إليه.

يُستدعَى التابع new عبر العديد من توابع الفتح الخاصة بالصنفين File و IO، مثل open و Kernel.open و File.open.

البنية العامة

new(fd [, mode] [, opt]) io

المعاملات

fd‎

واصف الملف المراد فتحه.

mode‎

وضع الفتح الذي يحدد الكيفية والغرض من فتح الملف ذي الواصف fd.

وضع الفتح (Open Mode)

إن كان المعامل mode عددًا صحيحًا، فيجب أن يكون مزيجًا من الأوضاع المعرفة في File::Constants‏ (مثل File::RDONLY، أو File::WRONLY|File::CREAT). انظر صفحة open(2)‎ لمزيد من المعلومات.

إن كان mode سلسلة نصية، فيجب أن يكون وفق أحد الصيغ التالية:

fmode
fmode ":" ext_enc
fmode ":" ext_enc ":" int_enc
fmode ":" "BOM|UTF-*"

fmode هو سلسلة نصية تمثل وضعية فتح (open mode) المجرى IO، فيما يمثل ext_enc الترميز الخارجي للمجرى، ويمثل int_enc الترميز الداخلي.

وضعية الفتح الخاصة IO

تتيح روبي أوضاع الفتح التالية:

  • "r": القراءة فقط، بدءًا من بداية الملف (الوضع الافتراضي).
  • "+r": القراءة والكتابة، بدءًا من بداية الملف.
  • "w": الكتابة فقط مع إنشاء واحد جديد للكتابة فيه. ستُمسَح محتويات الملف إن كان موجودًا مسبقًا.
  • "w+‎": الكتابة والقراءة مع إنشاء واحد جديد للكتابة فيه والقراءة منه. ستُمسَح محتويات الملف إن كان موجودًا مسبقًا.
  • "a": الكتابة فقط مع إنشاء ملف جديد لأجل الكتابة إن لم يكن موجودًا؛ كل عملية كتابة ستضيف بيانات إلى نهاية الملف.
  • "a+‎": الكتابة والقراءة مع إنشاء ملف جديد لأجل الكتابة إن لم يكن موجودًا؛ كل عملية كتابة ستضيف بيانات إلى نهاية الملف.

يجب استخدام الأوضاع التالية بشكل منفصل، بالإضافة إلى واحد أو أكثر من الأوضاع التي ذُكرت آنفًا:

  • "b": الوضع الثنائي (Binary file mode). يمنع تحويل المحارف EOL <-> CRLF في نظام ويندوز. ويعين الترميز الخارجي إلى القيمة ASCII-8BIT، إلا إن حُدد ترميز آخر.
  • "t": الوضع النصي (Text file mode).

ملاحظة: عندما يكون وضع فتح المجرى الأصلي هو القراءة فقط (read only)، فلن يكون بالإمكان تغيير الوضع لجعله قابلًا للكتابة. وبالمثل، لا يمكن تغيير وضع الفتح من الكتابة إلى القراءة فقط. عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة بحسب للنظام المستخدم.

ترميز المجرى IO

عند تحديد الترميز ext_enc، سيتم وسم السلاسل النصية بذلك الترميز عند القراءة، وستُحوّل السلاسل النصية المُخرجة إلى الترميز المحدد عند الكتابة.

عند تحديد الترميزين ext_enc و int_enc سيتم تحويل السلاسل النصية المقروءة من ext_enc إلى int_enc عند الإدخال، كما سيتم تحويل السلاسل النصية المكتوبة من int_enc إلى ext_enc عند الإخراج. راجع صفحة Encoding لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات.

في حال استخدام أحد الترميزات "BOM | UTF-8" أو "BOM | UTF-16LE" أو "BOM | UTF16-BE"، ستتحقق روبي من BOM لترميز اليونيكود في مستند الإدخال لأجل تحديد الترميز بشكل صحيح. بالنسبة للترميز UTF-16، يجب أن تكون وضعية فتح الملف ثنائية (binary). آنذاك، يُحذف BOM، ويُستخدم الترميز الخارجي المُستنتَج من BOM. أما عند عدم وجود BOM، فسيتم استخدام ترميز اليونيكود المعطى باعتباره الترميز الخارجي ext_enc. (خيار ضبط الترميز مع BOM غير حساس لحالة الأحرف، ما يجعل "bom | utf-8" صالحًا أيضًا.)

opt‎

يمكن استخدام هذا المعامل لتحديد أجزاء من الوضع mode بطريقة أكثر قابلية للقراءة.

المفاتيح التالية متاحة لاستعمالها مع هذا المعامل:

  • mode:: مثل المعامل mode.
  • flags:: يحدد رايات فتح الملف على هيئة عدد صحيح. في حال إعطاء المعامل mode، فسيتم جمع هذا المعامل مع المعامل mode باستخدام العملية OR الثنائية.
  • external_encoding: الترميز الخارجي للمجرى IO.
  • internal_encoding: الترميز الداخلي للمجرى IO. العلامة "-" هي مرادف للترميز الداخلي الافتراضي. إن كانت قيمة هذا المفتاح تساوي nil، فلن يحدث أي تحويل.
  • encoding: يحدد الترميزين الخارجي والداخلي وفقًا للشكل "extern:intern".
  • textmode: إن كانت القيمة قيمةً صحيحةً (truth value)، فسيكون مثل الوضع "t" في المعامل mode.
  • binmode: إن كانت القيمة قيمةً صحيحةً (truth value)، فسيكون مثل الوضع "b" في المعامل mode.
  • autoclose: إن كانت قيمته تساوي false، فسيبقى fd مفتوحًا بعد إنهاء المجرى IO.

أيضًا، يمكن أن يكون للمعامل opt نفس مفاتيح التابع String.encode للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي.

القيمة المعادة

يعاد كائن جديد من النوع IO.

أمثلة

مثال على استعمال التابع new بأبسط شكل له:

fd = IO.sysopen("/dev/tty", "w")
a = IO.new(fd,"w")
$stderr.puts "Hello"
a.puts "World"

الناتج:

Hello
World

مثال على استعمال التابع new مع تحديد المعامل mode والمعامل opt:

require 'fcntl'

fd = STDERR.fcntl(Fcntl::F_DUPFD)
io = IO.new(fd, mode: 'w:UTF-16LE', cr_newline: true)
io.puts "Hello, World!"

fd = STDERR.fcntl(Fcntl::F_DUPFD)
io = IO.new(fd, mode: 'w', cr_newline: true,
            external_encoding: Encoding::UTF_16LE)
io.puts "Hello, World!"

كلا المثالين أعلاه يطبعان "Hello, World!‎" وفق الترميز UTF-16LE في مجرى الخطأ القياسي، مع تحويل المحرف EOL الذي تم إنشاؤها من قبل puts إلى المحرف CR.

انظر أيضًا

  • التابع open: يشبه التابعَ new تمامًا عند استدعائه دون كتلة، أو يُمرّر الكائن IO الذي جرى إنشاؤه كوسيط إلى الكتلة المعطاة ثم يعيد الناتج الذي تعيده الكتلة.
  • التابع sysopen: يفتح الملف الموجود في المسار المحدد، ثم يعيد واصف الملف الأساسي كعدد صحيح.
  • التابع for_fd: يعد مرادفًا للتابع new.

مصادر