Tôi thấy mình liên tục tìm kiếm một định nghĩa rõ ràng về sự khác biệt của nil?
, blank?
và empty?
trong Ruby on Rails. Đây là lần gần nhất tôi đến:
blank?
các đối tượng là false, rỗng hoặc một chuỗi khoảng trắng. Ví dụ,""
," "
,nil
,[]
, và{}
là trống.nil?
các đối tượng là các thể hiện của NilClass.empty?
các đối tượng là đặc thù của lớp và định nghĩa khác nhau giữa các lớp. Một chuỗi trống nếu nó không có ký tự và một mảng trống nếu nó không chứa các mục.
Có bất cứ điều gì còn thiếu, hoặc so sánh chặt chẽ hơn có thể được thực hiện?
:nil?
được định nghĩa trên ::Kernel
và ghi đè vào ::NilClass
, trong khi :empty?
được thực hiện riêng rẽ trên nhiều lớp (natively trên ::String
, ::Array
, ::Hash
, và phi tự nhiên trên các lớp khác như ::Set
từ stdlib và ::ActiveRecord::Relation
từ đường ray). Vì vậy, :nil?
có sẵn trong tất cả các lớp con ::Object
và cũng như trong mọi lớp bao gồm ::Kernel
chính nó, nơi :empty?
phải được thực hiện hoặc bao gồm cụ thể trong các lớp của bạn.
nil
khái niệm bắt đầu ở đây .
[1] pry(main)> [].blank? => true
present?
. Đó là bởi vìblank?
trả về true cho một mảng trống.