2013-08-05 26 views
19

Chúng có giống nhau khi được sử dụng trong tuyên bố if/else/end không? Bạn thường làm gì? Tôi tự hỏi nếu có bất kỳ sự khác biệt hoặc trường hợp cạnh nào khác biệt, trong đó object!object.nil? sẽ phản hồi khác nhau.Ruby: "if! Object.nil?" hoặc "nếu đối tượng"

+3

Không phải là cách ruby ​​để viết 'nếu object.nil?.!' ;-) –

Trả lời

27

Có sự khác biệt. Ví dụ:

false.nil? 
# => false 

Vì vậy:

if !false.nil? 
    'foo' 
end 
# => "foo" 

if false 
    'foo' 
end 
# => nil 

Như @tokland đề nghị, trong hầu hết các trường hợp sử dụng !obj.nil? xây dựng là không cần thiết.

+3

@Downvoter bạn có thể giải thích? –

+0

Không, chúng không giống nhau. – sawa

+0

@sawa đó là những gì tôi đã viết. –

2

Vâng. if object sẽ hoạt động khác với if !object.nil? nếu object=false.

Đó là về nó.

7

if object kiểm tra xem object không phải là nil hoặc false.

!object.nil? kiểm tra nếu object không phải là nil. (Rubydoc)

Vì vậy, khi objectfalse, chúng có các giá trị khác nhau.

1

Đối tượng có thể ghi đè nil? nhưng chúng không thể sai trừ khi chúng không đúng hoặc không đúng. Cá nhân tôi sử dụng nil? hoặc present? của ActiveSupport để tôi duy trì sự linh hoạt đó. Tôi cũng nghĩ rằng nó đọc tốt hơn một chút.

11

Có một và chỉ một trường hợp trong đó !object.nil?object đánh giá kết quả khác nhau trong một bối cảnh boolean và đó là nếu objectfalse. Trong tất cả các tình huống khác kết quả là như nhau.

Với điều này, tôi nghĩ rằng chúng tôi có thể trả lời câu hỏi thực sự của bạn (đó là: Có bất kỳ tình huống mà tôi phải sử dụng if !object.nil? thay vì chỉ if object khi bảo vệ chống lại object là con số không):

Không, bạn luôn có thể sử dụng if object nếu bạn muốn kiểm tra lại nil.

Các vấn đề liên quan