2012-04-29 14 views

Trả lời

42

nil bằng Ruby, không phải null. Và nó đủ để nói if @objectname để kiểm tra xem nó không phải là không. Và không có then. Bạn có thể tìm thêm về if cú pháp ở đây:

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if

+2

Nó cũng sẽ được khuyến khích để chơi với 'ray console' để thử phát biểu khi đang bay – Jonathan

+0

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 –

+0

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. –

29

Bạn có thể kiểm tra xem một đối tượng là con số không (null) bằng cách gọi hiện nay? hoặc để trống? .

@object.present? 

điều này sẽ trả về false nếu dự án là chuỗi trống hoặc không.

hoặc bạn có thể sử dụng

@object.blank? 

này cũng giống như hiện nay? với một tiếng nổ và bạn có thể sử dụng nó nếu bạn không thích 'trừ khi'. điều này sẽ trả về true cho một chuỗi rỗng hoặc không.

+0

hiện đang hoạt động. tôi đã sử dụng trống –

+0

'#blank?' và '#present?' có các hàm ý khác hơn là đối tượng là 'nil'. Và 'sau đó', trong khi không phổ biến, là tốt trong Ruby nếu câu lệnh. –

4

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?#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 
7

Bây giờ với Ruby 2.3, bạn có thể sử dụng &. điều hành ('hành cô đơn') để kiểm tra nil cùng một lúc như truy cập vào một giá trị.

@person&.spouse&.name 

https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#Other_operators


Sử dụng #try thay vì vậy bạn không cần phải liên tục kiểm tra cho nil.

http://api.rubyonrails.org/classes/Object.html#method-i-try

@person.try(:spouse).try(:name) 

thay vì

@person.spouse.name if @person && @person.spouse