Trong Ruby (và nhiều ngôn ngữ khác) có nhiều giá trị đánh giá thành true
trong ngữ cảnh boolean và một số ít sẽ đánh giá sai. Trong Ruby, the only two things that evaluate to false
are false
(itself) and nil
.
Nếu bạn phủ nhận điều gì đó, điều đó sẽ buộc một ngữ cảnh boolean. Tất nhiên, nó cũng phủ nhận nó. Nếu bạn bỏ qua nó, nó sẽ ép buộc ngữ cảnh boolean, nhưng trả về giá trị boolean thích hợp.
Ví dụ:
"hello" #-> this is a string; it is not in a boolean context
!"hello" #-> this is a string that is forced into a boolean
# context (true), and then negated (false)
!!"hello" #-> this is a string that is forced into a boolean
# context (true), and then negated (false), and then
# negated again (true)
!!nil #-> this is a false-y value that is forced into a boolean
# context (false), and then negated (true), and then
# negated again (false)
Trong ví dụ của bạn, signed_in?
phương pháp phải trả lại một giá trị boolean (như được chỉ ra theo quy ước của các nhân vật ?
). Logic nội bộ mà nó sử dụng để quyết định giá trị này bằng cách kiểm tra xem biến current_user
có được đặt hay không. Nếu được đặt, nó sẽ đánh giá thành true
trong ngữ cảnh boolean. Nếu không, nó sẽ đánh giá là sai. Phép phủ định kép buộc giá trị trả về là boolean.
Bạn có nhìn vào các câu hỏi đã được trao cho bạn sau khi bạn đã nhập tiêu đề câu hỏi của bạn không? – Nakilon
Vâng, không có gì ở đó cả. Tôi thực sự đã tìm thấy câu hỏi tương tự giải thích cho tôi câu hỏi thứ hai, nhưng tôi phải tìm kiếm bằng "cú đúp" không rõ ràng như bạn nghĩ. – Vitaly
Vâng, thuật toán câu hỏi tương tự bị lừa dễ dàng khi các phần quan trọng của tiêu đề là các ký tự dấu chấm câu. – pkaeding