Trong ví dụ của bạn, bạn chỉ cần thay thế null
bằng `nil và nó sẽ hoạt động tốt.
require 'erb'
template = <<EOS
<% if (@objectname != nil) then %>
@objectname is not nil
<% else %>
@objectname is nil
<% end %>
EOS
@objectname = nil
ERB.new(template, nil, '>').result # => " @objectname is nil\n"
@objectname = 'some name'
ERB.new(template, nil, '>').result # => " @objectname is not nil\n"
Tương phản với những gì người khác nói, bạn có thể thấy ở trên đó then
hoạt động tốt trong Ruby. Nó không phổ biến, nhưng nó là tốt.
#blank?
và #present?
có các tác động khác. Cụ thể, nếu đối tượng phản hồi #empty?
, họ sẽ kiểm tra xem nó có trống không. Nếu bạn truy cập http://api.rubyonrails.org/ và tìm kiếm "trống?", Bạn sẽ thấy đối tượng nào được xác định và cách đối tượng hoạt động. Nhìn vào definition on Object, chúng tôi thấy "Một đối tượng trống nếu chuỗi đó là sai, trống hoặc một khoảng trắng. Ví dụ:" "," ", nil, [] và {} đều trống." Bạn nên chắc chắn rằng đây là những gì bạn muốn.
Ngoài ra, số không được coi là sai và bất kỳ điều gì khác ngoài sai và không được coi là đúng. Điều này có nghĩa bạn có thể trực tiếp đặt các đối tượng trong câu lệnh if, do đó, một cách kinh điển hơn về văn bản trên sẽ là
require 'erb'
template = <<EOS
<% if @objectname %>
@objectname is not nil
<% else %>
@objectname is nil
<% end %>
EOS
@objectname = nil
ERB.new(template, nil, '>').result # => " @objectname is nil\n"
@objectname = 'some name'
ERB.new(template, nil, '>').result # => " @objectname is not nil\n"
Nếu bạn rõ ràng cần phải kiểm tra nil
và không false
, bạn có thể sử dụng phương pháp #nil?
, cho mà nil là đối tượng duy nhất sẽ khiến điều này trả về true.
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false
Nó cũng sẽ được khuyến khích để chơi với 'ray console' để thử phát biểu khi đang bay – Jonathan
im có một này nếu @ reviews.nil? sau đó và luôn luôn đúng ngay cả khi có đánh giá hay không –
thì không nên có 'then' trong' if' của bạn. Bạn cũng có thể muốn giải thích thêm một chút về cách bạn cư trú '@ đánh giá' (nếu nó là trong thực tế' .nil? 'Tất cả thời gian) cho chúng tôi để cung cấp cho bạn một số ý tưởng nhiều hơn nữa. –