Tôi đang đọc một số mã Clojure tại thời điểm này có một loạt các giá trị chưa được khởi tạo là nil
cho một giá trị số trong một bản ghi được truyền đi xung quanh.Có một sự thay thế thành ngữ nào để nil-punning trong Clojure không?
Bây giờ rất nhiều thư viện Clojure treat this as idiomatic. Có nghĩa là nó là một quy ước được chấp nhận.
Nhưng nó cũng dẫn đến NullPointerException
, bởi vì không phải tất cả các chức năng chính của Clojure đều có thể xử lý nil
làm đầu vào. (Họ cũng không nên).
Các ngôn ngữ khác có khái niệm Maybe
hoặc Option
để ủy quyền giá trị trong trường hợp giá trị rỗng, như một cách để giảm thiểu nguy cơ NullPointerException
. Điều này có thể có trong Clojure - but not very common.
Bạn có thể thực hiện một số thủ thuật với fnil
nhưng không giải quyết được mọi sự cố.
Một phương án khác đơn giản là đặt giá trị chưa được khởi tạo thành một biểu tượng như :empty-value
để buộc người dùng xử lý tình huống này một cách rõ ràng trong tất cả mã xử lý. Nhưng đây không phải là bước tiến lớn từ nil
- bởi vì bạn không thực sự khám phá tất cả các kịch bản (trong mã của người khác) cho đến khi chạy.
Câu hỏi của tôi là: Có một lựa chọn thành ngữ nào để nil-punning trong Clojure không?