foo ||= []
foo << :element
Cảm thấy hơi lắt léo. Có cách nào thành ngữ hơn không?
foo ||= []
foo << :element
Cảm thấy hơi lắt léo. Có cách nào thành ngữ hơn không?
Câu trả lời:
(foo ||= []) << :element
Nhưng meh. Có thực sự khó khăn khi giữ cho nó có thể đọc được không?
foo
bản thân nó là một biểu thức phức tạp hơn, chẳng hạn như một hàm băm (lồng nhau) trong đó bạn tra cứu các giá trị, thì đây là một cách hay để tránh tìm kiếm các giá trị nhiều lần hoặc sử dụng một biến khác cho giá trị mảng đã tra cứu.
Bạn cũng có thể hưởng lợi từ Kernel # Array , như:
# foo = nil
foo = Array(foo).push(:element)
# => [:element]
có lợi ích là làm phẳng một Mảng tiềm năng, như:
# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]
foo = foo
đặt foo
thành nil
khi nào foo
là không xác định. Ngoài ra, Kernel#Array
không làm phẳng foo
. Nó chỉ trả về foo
nếu nó là một Mảng.
(foo ||= []) << :element
, nhưng tôi thấy nó xấu hơn.