2014-12-11 16 views
42

Tôi nhớ đọc ở đâu đó rằng not! được đánh giá khác nhau và tôi không thể tìm thấy nó trong tài liệu ruby. Điều này có đúng không? Họ có đồng nghĩa không?Ai đó có thể giải thích `không` so với`! 'Trong ruby?

Câu trả lời hay nên trích dẫn tài liệu.

+7

Rất có thể đó là vì câu hỏi của bạn có thể đã được trả lời bằng cách tìm kiếm trên Internet hoặc đọc một trong các sách Ruby. Stack Overflow được sử dụng để có một lý do gần gũi mà về cơ bản nói rằng người đó đã không thực hiện đủ nghiên cứu cho một câu hỏi đơn giản. Downvoters * nên * trích dẫn một lý do, nhưng họ hiếm khi làm. –

Trả lời

66

Chúng gần như đồng nghĩa, nhưng không hoàn toàn. Sự khác biệt là ! có mức ưu tiên cao hơn not, giống như &&|| có mức độ ưu tiên cao hơn andor.

! có quyền ưu tiên cao nhất của tất cả các toán tử và not một trong những mức thấp nhất, bạn có thể tìm thấy the full table at the Ruby docs.

Như một ví dụ, hãy xem xét:

!true && false 
=> false 

not true && false 
=> true 

Trong ví dụ đầu tiên, ! có ưu tiên cao nhất, vì vậy bạn có hiệu quả nói false && false.
Trong ví dụ thứ hai, not có mức độ ưu tiên thấp hơn true && false, do đó, điều này "đã chuyển" số false từ true && false thành true.

Hướng dẫn chung có vẻ là bạn nên dính vào !, trừ khi bạn có lý do cụ thể để sử dụng not. ! trong Ruby hoạt động giống như hầu hết các ngôn ngữ khác và "ít gây ngạc nhiên" hơn not.

+3

Tôi đã sử dụng 'không' trong quá khứ để làm cho các điều kiện phủ định dễ đọc hơn. Có nghĩa là nếu toàn bộ các điều kiện nên được phủ nhận tôi cảm thấy thoải mái bằng cách sử dụng 'không' thay vì '!'. Tôi thích nó khi mã của tôi đọc như inglush – jaydel

+0

@jaydel Bạn có thể sử dụng 'trừ khi' trong trường hợp đó? – Jacob

+0

@ Jacob, vâng, chắc chắn. 'trừ khi' không thực sự được ưa chuộng trong thế giới ruby. Sự đồng thuận chung là nó chỉ cản trở khi '!' Hoạt động tốt trong hầu hết các tình huống. Tôi chắc chắn có những trường hợp trừ khi có thể có tính biểu cảm hơn, nhưng tôi chỉ đạo rõ ràng. – Brennan

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