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ư &&
và ||
có mức độ ưu tiên cao hơn and
và or
.
!
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
.
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. –