Rõ ràng ||=
sẽ không làm việcLàm thế nào tôi có thể ghi nhớ một phương thức có thể trả về true, false hoặc nil trong Ruby?
def x?
@x_query ||= expensive_way_to_calculate_x
end
bởi vì nếu nó hóa ra là false
hoặc nil
, sau đó expensive_way_to_calculate_x
sẽ được chạy hơn và hơn.
Hiện nay cách tốt nhất mà tôi biết là đưa giá trị vào một Array
:
def x?
return @x_query.first if @x_query.is_a?(Array)
@x_query = [expensive_way_to_calculate_x]
@x_query.first
end
Có một cách thông thường nhiều hơn hoặc hiệu quả để làm điều này?
CẬP NHẬT tôi nhận ra rằng tôi muốn memoize nil
ngoài false
- điều này đi tất cả các cách trở lại https://rails.lighthouseapp.com/projects/8994/tickets/1830-railscachefetch-does-not-work-with-false-boolean-as-cached-value - lời xin lỗi của tôi để Andrew Marshall người đã cho một câu trả lời khác hoàn toàn chính xác.
Đây là những gì 'nil' và toàn bộ khái niệm của' null' là cho. – meagar
Tôi đã chỉnh sửa câu hỏi của mình bởi vì tôi đã không làm điều đó ngay lần đầu tiên - tôi cũng muốn ghi nhớ nil. –