ฉันพบตัวเองซ้ำ ๆ มองหาคำนิยามที่ชัดเจนของความแตกต่างของnil?, blank?และempty?ใน Ruby on Rails นี่คือสิ่งที่ฉันมาใกล้ที่สุด:
- blank?วัตถุเป็นเท็จว่างหรือสตริงช่องว่าง ตัวอย่างเช่น- "",- " ",- nil,- []และ- {}มีความว่างเปล่า
- nil?วัตถุเป็นอินสแตนซ์ของ NilClass
- empty?วัตถุเป็นคลาสเฉพาะและข้อกำหนดแตกต่างกันไปในแต่ละคลาส สตริงว่างเปล่าหากไม่มีตัวอักษรและอาร์เรย์จะว่างเปล่าหากไม่มีรายการ
มีอะไรที่ขาดหายไปหรือการเปรียบเทียบที่เข้มงวดกว่านี้สามารถทำได้หรือไม่?
:nil?มีการกำหนดใน::Kernelและแทนที่ใน::NilClassขณะที่:empty?มีการใช้งานแยกกันในชั้นเรียนจำนวนมาก (natively บน::String, ::Array, ::Hashและไม่ใช่กำเนิดในชั้นเรียนอื่น ๆ เช่น::Setจาก STDLIB และ::ActiveRecord::Relationจากราง) ดังนั้น:nil?มีอยู่ในคลาสย่อยทั้งหมด::Objectและในทุกคลาสที่รวมอยู่::Kernelด้วยซึ่ง:empty?จะต้องนำไปใช้หรือรวมไว้ในคลาสของคุณโดยเฉพาะ
                [1] pry(main)> [].blank? => true
                


present?เป็นที่ว่างเปล่าเท็จผลตอบแทนอาร์เรย์ ซึ่งเป็นเพราะblank?ผลตอบแทนจริงสำหรับอาร์เรย์ที่ว่างเปล่า