Với phương pháp sau đây:Cách trả về (a_method ||: other) trả về: chỉ khác khi gán cho một var gọi là a_method?
def some_method
:value
end
Các câu sau đây làm việc như tôi mong chờ:
some_method || :other
# => :value
x = some_method || :other
# => :value
Nhưng hành vi của các tuyên bố sau làm bối rối tôi:
some_method = some_method || :other
# => :other
Nó tạo ra một biến cục bộ được gọi là some_method
như mong đợi và các cuộc gọi tiếp theo tới some_method
trả về giá trị của loca đó l biến. Nhưng tại sao nó chỉ định :other
thay vì :value
?
Tôi hiểu rằng đó có thể không phải là điều thông minh để làm, và có thể thấy nó có thể mơ hồ như thế nào, nhưng tôi nghĩ rằng phía bên tay phải của nhiệm vụ cần được đánh giá trước khi phân công được xem xét ...
Tôi đã thử nghiệm điều này trong Ruby 1.8.7 và Ruby 1.9.2 với kết quả giống hệt nhau.
Chúc mừng!
Paul
"Tôi nghĩ rằng phía bên tay phải của bài tập phải được đánh giá trước bài tập". Đó là, nhưng nó là bên tay phải của dấu '=', không phải toàn bộ dòng. 'some_method' sẽ được đánh giá để xem nếu nó có một" sự thật "đầu tiên, và, nếu có, điều đó sẽ được trả về. Nếu không thì ': other' sẽ được xem xét. Các toán tử Boolean như '||' và '&& 'đôi khi có vẻ tùy ý vì cách một ngôn ngữ cụ thể xác định" sự thật ". Ví dụ, Perl xác định nó khác với Ruby, vì vậy bạn phải nhận thức được sự khác biệt nếu bạn sử dụng cả hai ngôn ngữ. –