Vì vậy, tôi biết một vài cách tiếp cận khác nhau mà tôi biết và tôi muốn khám phá những ưu điểm và nhược điểm của các cách khác nhau với các tiêu chí khác nhau đó là:dài nil chuỗi phương pháp an toàn
- dễ đọc
- hiệu suất
- dễ gỡ lỗi
- nguyên tắc OO (khớp nối thấp và sự gắn kết cao)
Rõ ràng sử dụng phương pháp thử từ hỗ trợ tích cực
person.try(:pet).try(:name).try(:upcase)
Sử dụng một ứng cứu nil
person.pet.name.upcase rescue nil
Sử dụng một chuỗi & & hành
person && person.pet && person.pet.name && person.pet.name.upcase
khỉ vá lớp Object, xem https://gist.github.com/thegrubbsian/3499234 cho các ý chính gốc
class Object
def try_all(*methods)
values = [self]
methods.each do |method|
value = values.last.try(method)
return nil if value.nil?
values << value
end
values.last
end
end
person.try_all(:pet, :name, :upcase)
Đừng có nil đang an toàn, thay vì xác nhận các dữ liệu trước khi bạn gọi mã
#not a good implementation by any means
def person_has_pet_with_name? person
begin
return true if !person.pet.name.nil?
rescue
return false
end
end
person.pet.name.upcase if person_has_pet_with_name?(person)
Câu trả lời của tôi có giúp ích gì cho bạn không? –
Vui lòng đánh dấu câu trả lời là câu hỏi đã được giải quyết, nếu câu trả lời được trả lời cho câu hỏi của bạn. –