2012-03-08 19 views

Trả lời

8

Không, hai toán tử có cùng tác dụng nhưng ưu tiên khác nhau.

Toán tử || có mức ưu tiên rất cao, vì vậy nó liên kết rất chặt chẽ với giá trị trước đó. Toán tử or có ưu tiên rất thấp, vì vậy nó liên kết chặt chẽ hơn so với toán tử khác.

Lý do có hai phiên bản chính xác là một phiên bản có mức ưu tiên cao và một phiên bản khác có mức ưu tiên thấp, vì điều đó thuận tiện.

+0

vì vậy nếu câu lệnh đầu tiên sẽ đánh giá một cái gì đó như ("[" || line.strip.empty?) = "[" Và sau đó (line.start_with? "["). – surajz

+1

Chính xác như vậy. Ưu tiên là một cách để đoán những gì bạn có nghĩa là khi bạn rời khỏi, ví dụ, dấu ngoặc đơn. Cũng giống như ưu tiên toán học hoạt động. –

1

Daniel là đúng, rõ ràng hơn:

if (line.start_with?("[") || line.strip.empty?) 
    puts "yes" 
end 

sẽ sản xuất yes

3

Trong trường hợp đầu tiên bạn sử dụng || mà là đánh giá trước hơn bất cứ điều gì khác trong báo cáo kết quả do sự ưu tiên cũng đã nêu bởi answeres khác, làm cho nó rõ ràng hơn với một số ngoặc nói thêm, tuyên bố đầu tiên của bạn là như sau:

(line.start_with? ("[" || line.strip.empty?)) 

Mà dịch để

(line.start_with? ("[")) 

kết quả FALSE

Mặt khác, tuyên bố thứ hai của bạn dịch để

((line.start_with? "[") or line.strip.empty?) 

Mà dịch để

(FALSE or TRUE) 

kết quả đúng

That's tại sao tôi cố gắng sử dụng mọi ngoặc tôi gọi một hàm. :-)

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