2009-09-07 34 views

Trả lời

24

Nó gán một giá trị nếu chưa được gán. Như thế này:

a = nil 
a ||= 1 

a = 1 
a ||= 2 

Trong ví dụ đầu tiên, một sẽ được thiết lập để 1. Trong một giây, một vẫn sẽ là 1.

+1

Trông giống như toán tử 'coalesce' của SQL –

+0

Cảm ơn ... Chỉ đảm bảo rằng giá trị hiện tại của biến không bị ghi đè. –

+0

This i s đẹp. Một cái gì đó C# có thể truyền cảm hứng từ. :-) –

1

tôi chỉ có thể đoán, nhưng tôi cho rằng đó là viết tắt của một toán tử logic kết hợp với thiết lập một biến (như^=, + =, * = bằng các ngôn ngữ khác)

nên x ||= y cũng giống như x = x || y

chỉnh sửa: tôi đoán đúng, xem http://phrogz.net/ProgrammingRuby/language.html#table_18.4

x = x || y có nghĩa là: sử dụng x nếu được đặt, nếu không thì chỉ định y. nó có thể được sử dụng để đảm bảo các biến được ít nhất khởi tạo (đến 0, thành một mảng trống, v.v.)

1

Nếu b là con số không, gán cho nó.

a = :foo 
b ||= a 
# b == :foo 

Nếu b không phải là không, đừng thay đổi.

a = :foo 
b = :bar 
b ||= a 
# b == :bar 
0

Đây là một 'nhiệm vụ viết tắt' (xem Ruby Pocket Reference, trang 10)

a = một || b

(có nghĩa là được gán giá trị hình thành bởi logic hoặc a, b

trở thành

một || = b

Hầu như tất cả các nhà khai thác có một phiên bản rút gọn (+ = * = & & = etc)

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