Tôi không thể hiểu được ưu tiên của các nhà khai thác Ruby trong một ví dụ sau:Hiểu được ưu tiên của nhiệm vụ và toán tử logic trong Ruby
x = 1 && y = 2
Kể từ &&
có độ ưu tiên cao hơn =
, sự hiểu biết của tôi là tương tự như +
và *
nhà khai thác:
1 + 2 * 3 + 4
được giải quyết như
1 + (2 * 3) + 4
nó phải bằng:
x = (1 && y) = 2
Tuy nhiên, tất cả các nguồn Ruby (bao gồm cả nội phân tích cú pháp cú pháp Ripper
) phân tích này như
x = (1 && (y = 2))
Tại sao?
EDIT [2016/08/01]
Hãy tập trung vào một subexpression: 1 && y = 2
Theo quy tắc ưu tiên, chúng ta nên cố gắng phân tích nó như:
(1 && y) = 2
điều này không có ý nghĩa bởi vì =
yêu cầu LHS cụ thể (biến, hằng số, []
mục mảng vv). Nhưng vì (1 && y)
là một biểu thức chính xác, trình phân tích cú pháp nên xử lý nó như thế nào?
Tôi đã cố gắng tham khảo ý kiến của Ruby parse.y
, nhưng nó giống như mì spaghetti mà tôi không thể hiểu các quy tắc cụ thể cho việc phân công.
Câu hỏi hay, có một số bằng khen trong đối số. –