Gần đây tôi đã biết rằng bạn có thể sử dụng rescue
trên một dòng mã trong trường hợp xảy ra sự cố trên dòng đó (xem http://www.rubyinside.com/21-ruby-tricks-902.html Mẹo # 21). Tôi có một số mã được sử dụng để trông như thế này:Ruby Oneline Rescue
if obj['key'] && obj['key']['key2'] && obj['key']['key2']['name']
name = obj['key']['key2']['name']
else
name = ''
end
Với phương pháp rescue
, tôi tin rằng tôi có thể thay đổi mã đó vào một cái gì đó như thế này:
name = obj['key']['key2']['name'] rescue ''
Nếu một ngoại lệ bằng không được ném vào bất kỳ mức độ truy cập vào băm, nó sẽ bị bắt bởi cứu hộ và cho tôi '', đó là những gì tôi muốn. Tôi cũng có thể chọn đặt tên thành nil
nếu đó là hành vi mong muốn.
Có bất kỳ mối nguy hiểm nào đã biết khi thực hiện việc này không? Tôi hỏi vì điều này có vẻ quá tốt là đúng. Tôi có rất nhiều mã xấu xí mà tôi muốn loại bỏ nó trông giống như ví dụ mã đầu tiên.
Cho rằng sử dụng cụ thể, một inline 'giải cứu 'là an toàn. Hãy * RẤT * cẩn thận khi sử dụng nó ở cuối cuộc gọi phương thức, trong đó một thứ khác có thể làm tăng ngoại lệ, có thể do lỗi I/O hoặc thiếu thông tin cơ sở dữ liệu. Gỡ lỗi những tình huống đó thực sự, thực sự, khó khăn và có thể khiến bạn phát điên. –