Trong nhiều ngôn ngữ, nếu bạn viết một cái gì đó dọc theo dòng củaClojure có logic mạch ngắn không?
if (foo() || bar() || foobar()) { /* do stuff */ }
và foo() trả về true, sau đó thanh() và foobar() sẽ không được đánh giá.
Giả sử tôi có mã Clojure sau:
(let [a (simple-function args)
b (complex-function args)
c (too-lazy-to-optimize-this-function args)]
(or a b c))
Nếu một đánh giá lại là true, sẽ b và c cũng được đánh giá, hoặc họ sẽ bị bỏ qua?
Cảm ơn!
Tôi chấp nhận một điều này bởi vì nó thảo luận về Gotcha mà tôi đã không biết. – Joel
Nó không phải là một bản ghi nhớ, thay vì bạn phải hiểu tất cả mọi thứ là háo hức ngoại trừ trình tự lười biếng, và các chức năng mà làm việc trên chúng. Các 'hoặc' ngắn mạch vì nó là một vĩ mô, nó mở rộng để http://bit.ly/u8xnms. Nếu nó là một hàm, nó sẽ đánh giá các đối số của nó. Thay vào đó, macro macro mở rộng thành if, là một dạng đặc biệt và các mạch ngắn. – gtrak