Một câu hỏi tương tự đã được hỏi về điều này nhưng không được hỏi chính xác trong cùng một cụm từ.Biểu thức 'bắt' của Erlang so với try/catch về mặt hiệu quả
Tôi đang cố gắng giải mã một cách an toàn các tệp nhị phân base64, trong ngữ cảnh có thể đầu vào sẽ không phải là mã nhị phân hoặc thậm chí là mã hóa base64.
Erlang nói hãy để nó sụp đổ và xử lý - nếu tôi làm như vậy, cách hiệu quả nhất là gì. Hiệu quả là khá quan trọng trong hệ thống này.
Tôi biết để tránh thử/nắm bắt, vì nó xây dựng một dấu vết ngăn xếp đầy đủ - tuy nhiên, là từ khóa bắt hợp lý cho bối cảnh này? Và là từ khóa bắt nhanh hơn/hiệu quả hơn?
Trong một chức năng như
safe_decode(Binary) ->
case catch base64:decode(Binary) of
<<Result/binary>> -> {ok, Result};
{'EXIT', _} -> {not_base64, Binary}
end.
Đây có phải là thực sự hiệu quả hơn một catch? Cách tốt nhất để xử lý kịch bản này trong một hệ thống nơi hiệu quả là quan trọng, tức là các sự cố liên quan đến việc tạo dấu vết ngăn xếp và/hoặc yêu cầu xử lý nhiều hơn đường dẫn hạnh phúc cần được xử lý hiệu quả nhất có thể.
Tôi chỉ đang học tập, vì vậy có thể câu trả lời đang nhìn chằm chằm vào mặt tôi.
Rất thú vị - cảm ơn! –
Bạn cũng có thể muốn 'spawn_monitor' là một quá trình không thể gây phiền toái, hoặc sẽ gửi cho bạn một thông báo thành công hoặc một ghi chú chết (màn hình) về thất bại ngay lập tức mà không khuyến khích bất kỳ' try..catch' điên rồ nào. * Đôi khi * đây là giải pháp lý tưởng. Đôi khi không. Như mọi khi, điểm chuẩn. Nếu bạn đang thu hút * nhiều * dữ liệu đầu vào xấu thì sự cố có thể là tải nhẹ hơn. Nếu 99% dữ liệu đầu vào của bạn tốt, thì 'try..catch' có thể tốt hơn. – zxq9