معنى - شرح موجز ل nil v. فارغة v. فارغة في Ruby on Rails




لغة روبي pdf (10)

أجد نفسي مرارا وتكرارا أبحث عن تعريف واضح للاختلافات من nil? blank? و empty? في روبي على القضبان. هنا الأقرب لقد جئت:

  • blank? كائنات خاطئة أو فارغة أو سلسلة مسافة بيضاء. على سبيل المثال ، "" ، " " ، nil ، [] ، و {} فارغة.

  • nil? كائنات هي أمثلة من NilClass.

  • empty? تكون الكائنات خاصة بالفئة ، ويختلف التعريف من فئة إلى أخرى. السلسلة فارغة إذا لم تحتوي على أحرف ، ويكون الصفيف فارغًا إذا لم يكن يحتوي على أي عناصر.

هل هناك أي شيء مفقود ، أو مقارنة أكثر إحكامًا يمكن إجراؤها؟


الجميع قد أوضح جيدا ما هو الفرق.

وأود أن أضيف في روبي على القضبان ، فمن الأفضل استخدام obj.blank? أو obj.present? بدلا من obj.nil? أو obj.empty? .

obj.blank? يعالج جميع أنواع nil ، '' ، [] ، {} ، ويعرض true إذا كانت القيم غير متوفرة وتعرض false إذا كانت القيم متاحة على أي نوع من الكائنات.


القضبان 4

بديل لـ @ corban-brook 's ' Array gotcha: blank؟ ' للتحقق مما إذا كانت المصفوفات تحمل قيمًا فارغة فقط ويمكن اعتبارها فارغة؟ صحيح:

[ nil, '' ].all? &:blank? == true

يمكن للمرء أيضًا أن يفعل:

[nil, '', "", " ",'  '].reject(&:blank?).blank? == true

فرق واحد هو أن .nil? و. .empty? هي الطرق التي تقدمها لغة البرمجة روبي ، في حين أن .blank? هو شيء added إطار تطوير الويب القضبان.


لا تنس any? وهو عموما !empty? . في القضبان ، عادةً ما أتحقق من وجود شيء ما في نهاية البيان if something unless something أو unless something blank? عند الحاجة حيث يبدو أنها تعمل في كل مكان.



مجرد ملاحظة صغيرة عن any? التوصية: إنه الحق في أن يكون مكافئًا بشكل عام !empty? . ومع ذلك ، any? سيعود إلى سلسلة من المسافات البيضاء (ala " " ).

وبالطبع ، راجع التعليق 1.9 أعلاه أيضًا.


  • كل ما هو nil? blank?
  • كل ما هو empty? blank?
  • لا شيء empty? هو nil?
  • لا شيء هو nil? empty?

tl ؛ د - فقط استخدام blank? & present? إلا إذا كنت تريد التمييز بين "" و " "


.nil? يمكن استخدامه على أي كائن وهو صحيح إذا كان الكائن لا شيء.

.empty? يمكن استخدامها على السلاسل والمصفوفات والتجزئة والعودة صحيح إذا:

  • طول السلسلة == 0
  • طول المصفوفة == 0
  • طول تجزئة == 0

تشغيل. .empty? على شيء لا شيء سيلقي NoMethodError .

هذا هو المكان .blank? يأتي في. وينفذ من قبل القضبان ، وسوف تعمل على أي كائن وكذلك العمل مثل. .empty? على الاوتار والمصفوفات والتجزئة.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? تقييم صحيح أيضًا على السلاسل غير الفارغة ولكنها تحتوي فقط على مسافة بيضاء:

"  ".blank? == true
"  ".empty? == false

توفر القضبان أيضا .present? ، والتي ترجع نفي .blank? .

مجموعة مسكتك: blank? سيعود false حتى إذا كانت جميع عناصر المصفوفة فارغة. لتحديد الفراغ في هذه الحالة ، استخدم all? مع blank? ، فمثلا:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

nil? هو أسلوب Ruby قياسي يمكن استدعاؤه على كل الكائنات ويعيد true إذا كان الكائن nil :

b = nil
b.nil? # => true

empty? هو أسلوب روبي قياسي يمكن استدعائه على بعض الكائنات مثل السلاسل والصفائف والفرش ويعود إلى true إذا لم تحتوي هذه الكائنات على أي عنصر:

a = []
a.empty? # => true

b = ["2","4"]
b.empty? # => false

empty? لا يمكن أن يسمى على كائنات nil .

blank? هي طريقة القضبان التي يمكن استدعائها على كائنات صغيرة وكذلك كائنات فارغة.


nil? يمكن استخدامها على أي كائن. ويحدد ما إذا كان الكائن له أي قيمة أم لا ، بما في ذلك القيم "الفارغة".

فمثلا:

example = nil
example.nil?  # true

"".nil?  # false

في الأساس nil? سوف يعود فقط صحيح إذا كان الكائن مساوياً لـ "لا شيء".

empty? يسمى فقط على الكائنات التي تعتبر مجموعة. وهذا يشمل أشياء مثل السلاسل (مجموعة من الأحرف) ، و التجزئة (مجموعة من أزواج المفاتيح / القيم) و المصفوفات (مجموعة من الأشياء التعسفية). empty? يعود الحقيقي هو عدم وجود عناصر في المجموعة.

فمثلا:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

لاحظ أن empty? لا يمكن استدعائها على كائنات لا شيء كما لا توجد كائنات لا شيء ، وسوف تثير استثناء.

لاحظ أيضًا أنه حتى إذا كانت العناصر الموجودة في مجموعة فارغة ، فهذا لا يعني أن المجموعة فارغة.

blank? هو في الأساس مزيج من nil? و empty? من المفيد فحص الكائنات التي تفترض أنها مجموعات ، ولكن يمكن أيضًا أن تكون غير موجودة.





ruby