Xin lỗi nếu câu hỏi này không có ý nghĩa gì.Luồng chương trình - bảo lãnh không hoạt động nếu một phép tính không thành công
Tôi hiện đang ở giữa việc viết một ứng dụng nhỏ và tôi muốn 'chuỗi' một số chức năng với nhau tạo thành một tính toán rộng hơn. Ví dụ:
Ví dụ: tôi có một chức năng gọi một dịch vụ web và trả về một kết quả là hash-map
hoặc nil
nếu đó là lỗi hoặc đã xảy ra sự cố. Hàm tiếp theo trong chuỗi lấy bản đồ và thực hiện thêm một số xử lý và sau đó chuyển nó sang hàm tiếp theo ... và cứ tiếp tục như vậy. Điều này là nếu chức năng đầu tiên thất bại, nó sẽ vượt qua nil
đến chức năng tiếp theo và sẽ ném một nullpointer (hoặc bất cứ điều gì) và tôi không muốn nó thậm chí đạt đến giai đoạn này. Vì vậy, nói cách khác tôi muốn toàn bộ tính toán thất bại nếu một mục trong chuỗi bị lỗi.
ví dụ:
;successful computation = function1 returns W -> function2 returns X -> function3 returns Y -> function4 returns Z -> Z
;failed computation = function1 returns W -> function2 returns X -> function3 returns nil -> nil
(-> (function1 "http://webservice.com") (function2) (function3) (function4))
Vấn đề là tôi không muốn được xả rác mỗi chức năng của tôi với if(nil? arg)
lúc bắt đầu, tốt nhất là tôi muốn một sự trừu tượng mà có thể chăm sóc cho rằng đối với tôi nhưng tôi không thực sự clued lên trên những gì có sẵn trong Clojure
tôi đã nghĩ đến việc áp dụng các Scala phong cách Option
kiểu đó có thể là Some(value)
hoặc None
nhưng tôi vẫn sẽ cần phải xả rác mã của tôi với những kiểm tra vào đầu
Bất kỳ ý tưởng hoặc câu trả lời sẽ thực sự được đánh giá cao
này awesome là những gì tôi đang tìm kiếm, có vẻ như có một vài trừu tượng khác trong thư viện đó sẽ chứng minh là rất hữu ích đối với tôi nữa! – djhworld