tìm kiếm a
nếu a
là truthy, trả a
, nếu không a = b
được thực hiện ví dụ: bạn gán giá trị b
's để a
.
a = a || b
Đây là thao tác gán. Tại đây, bạn chỉ định giá trị cho a
bất kể giá trị nó nắm giữ là bao nhiêu. Vì vậy, a
bằng a || b
. Trong phần thứ hai của tuyên bố bạn đang tìm kiếm a
. Nếu giá trị của nó là trung thực, bạn sẽ chỉ định giá trị đó trở về số a
, nếu không bạn sẽ chỉ định giá trị b
cho a
.
TL; DR
a = a || b
được gán một giá trị (tùy thuộc vào điều kiện)-a
không phụ thuộc vào những gì đánh giá cao nó giữ.
a ||= b
trở a
nếu đã hiện diện, nếu không làm a = b
Giải thích với ví dụ:
Bạn có thể nghĩ a || a = b
như a || (a = b)
. Bây giờ, hãy giả sử a = 4
và b = 6
.
Từ bởi thứ tự ưu tiên, đây là một hoạt động OR và vì thứ tự của hoạt động cho HOẶC được trái sang phải chúng ta bắt đầu với a
đầu tiên:
# lets call this Fig. 1
a || (a = b)
^
|
.
(here)
a
này có giá trị 4, đó là một giá trị truthy . Do đó việc đánh giá dừng lại và ở đó và 4
được trả lại. (Tại sao? Gợi ý:true || anything = true
)
Bây giờ, hãy giả sử a = nil
và b = 6
. Chúng ta bắt đầu lại từ cùng một vị trí (Hình 1). Vì a
là nil
là sai trong Ruby, chúng tôi di chuyển sang bên phải của thao tác OR, tức làa = b
# lets call this Fig. 2
a || (a = b)
^
|
.
(here)
Vì đây là một hoạt động chuyển nhượng, nó sẽ được thực hiện và chúng tôi sẽ kết thúc giao 6
-a
.
Quay lại a = a || b
. Bạn có thể nghĩ điều này là a = (a || b)
. Rõ ràng theo thứ tự ưu tiên của nó một hoạt động gán. Vì thứ tự các phép toán cho phép gán là phải sang trái, nên (a || b)
được đánh giá trước tiên.
# lets call this Fig. 3
a = (a || b)
^
|
.
(here)
Nếu a = 4
và b = 6
, a || b
sẽ trở lại 4
(như đã trình bày ở trên). Khác nếu a = nil
và b = 6
, a || b
sẽ trả lại 6
.
Bây giờ, bất kỳ giá trị nào được trả lại từ hoạt động ||
này sẽ được gán cho a
đầu tiên.
# lets call this Fig. 4
a = (a || b)
^
|
.
(here)
Có thể muốn đọc [bài viết này] (http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html). 'a || a = b', 'a = a || b', và 'a || = b' là tất cả hơi khác nhau trong tự nhiên. – Oka