Khi nào trong thực tế, tôi nên sử dụng letfn vs. let để xác định các hàm cục bộ? Còn các trường hợp tôi muốn có cả chức năng cục bộ và chức năng không cục bộ thì sao?let vs letfn để xác định các hàm cục bộ trong clojure?
Trả lời
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ẻ!
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.
- 1. let vs def in clojure
- 2. Khi nào sử dụng let và if-let trong Clojure
- 3. Làm thế nào để xác định các hàm cục bộ trong PHP?
- 4. Làm thế nào để xác định các biến tĩnh cục bộ luồng cục bộ?
- 5. clojure - giải quyết một biểu tượng bên trong let
- 6. Xác định Clojure multimethods
- 7. Làm cách nào để xác định hàm trong một hàm trong Clojure và tham chiếu hàm đó?
- 8. clojure - cách chính xác để ghi đè cục bộ các toán tử như "+", "*", v.v.
- 9. Cách tiêu chuẩn để viết các câu lệnh xác định lồng nhau (như trong sơ đồ) cho clojure là gì?
- 10. Clojure: xác định xem hàm có tồn tại
- 11. jQuery/Javascript: Xác định biến toàn cục trong một hàm?
- 12. Làm cách nào để tạo macro để xác định hai hàm trong clojure
- 13. Xác định lại "def" trong Clojure
- 14. defn vs let liên quan đến sự phân hủy
- 15. Làm thế nào để bạn xác định một var/val cục bộ trong hàm tạo chính trong Scala?
- 16. Xác định lại biến cục bộ bằng var trong JavaScript
- 17. Tôi nên xác định các hàm toàn cục trong ExtJS 4 MVC ở đâu?
- 18. Danh sách các hàm do người dùng xác định toàn cục trong JavaScript?
- 19. Biến cục bộ trong bash: local vs subshell
- 20. Tại sao ocaml cần cả "let" và "let rec"?
- 21. Thứ tự đánh giá các đối số hàm trong Clojure
- 22. Các hàm được xác định tại địa phương doctest
- 23. Làm cách nào để đánh giá các hàm trong Clojure?
- 24. Xác định lại biến số let'd trong vòng lặp Clojure
- 25. Làm thế nào để `let` được thực hiện trong Clojure và chi phí của nó là gì?
- 26. Cách xác định kết nối đến từ máy cục bộ
- 27. biến cục bộ hoặc phương thức không xác định 'current_user'
- 28. OCaml: Khai báo hàm trước khi xác định hàm
- 29. Xác định các biến toàn cục trong mpi
- 30. Đặt biến cục bộ trong hàm gọi lại JavaScript
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
Một hàm có thể tự tham chiếu theo cách này: '(fn foo [x] .... (foo ...) ...)' – mikera
Đú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