2009-07-29 18 views

Trả lời

37

Nếu tất cả những gì tôi cần là chức năng cục bộ hoặc 2 ... hoặc 3 ... Tôi sẽ cho phép chúng. Nếu tôi cần phải kết hợp các chức năng và không hoạt động, tôi sẽ chỉ sử dụng một phép bình thường. việc cho phép và cho phép sẽ là một cách rất tiết kiệm để làm điều này.

Tuy nhiên, nếu bạn cần đệ quy lẫn nhau thông qua các chức năng cục bộ của mình, bạn sẽ phải bỏ qua cả hai cách.

Phiên bản ngắn: Sử dụng chúng khi bạn nghĩ nó trông đẹp hơn và khi nào thuận tiện. Không có quy tắc cứng và nhanh nào để sử dụng cả hai. Chúng chỉ là công cụ trong hộp công cụ Clojure.

Hãy vui vẻ!

18

Thông thường nó dễ dàng hơn và gọn gàng hơn để sử dụng let: cách mà bạn có thể định nghĩa một tập của cả hai chức năng và phi chức năng trong một hình thức duy nhất, và thậm chí xem lại định nghĩa trước:

(let [f  (fn [x] ....) 
     value (reduce f some-collection) 
     foo bar] 
    .....) 

letfn thực sự là chỉ cần thiết khi bạn muốn xác định nhiều hàm đệ quy với nhau. let sẽ không hoạt động trong trường hợp này vì nó không hỗ trợ tham chiếu đệ quy.

+0

Lưu ý rằng ngay cả đối với đệ quy đơn giản (một chức năng mà cơ thể sử dụng chính nó) một letfn là cần thiết. – fmjrey

+3

Một hàm có thể tự tham chiếu theo cách này: '(fn foo [x] .... (foo ...) ...)' – mikera

+0

Đúng vậy! Mặc dù trong một hình thức cho phép có nghĩa là có hai tên cho cùng một fn (một tên trong ràng buộc cho phép, một tên khác trong biểu mẫu fn) hoặc lặp lại cùng một tên hai lần, vì vậy letfn có thể tốt hơn. – fmjrey

Các vấn đề liên quan