Tôi đã sử dụng clojure được vài tháng và một điều tôi thực sự không hiểu là tại sao dấu gạch ngang trong các tên không gian tên phải được biểu diễn dưới dạng dấu gạch dưới trong hệ thống tệp. Bất cứ ai có thể giải thích điều này với tôi, và nó có thể để có thể sử dụng dấu gạch ngang trong tên tập tin quá?Tại sao clojure chuyển đổi dấu gạch ngang trong tên thành gạch dưới trong hệ thống tệp?
Trả lời
Đó là giải pháp cần thiết cho khả năng tương tác Java.
Khi không gian tên Clojure là AOT (trước thời hạn) được biên dịch thành tệp .class của Java, nó phải có tên là số nhận dạng Java hợp lệ. Dấu gạch ngang không hợp lệ trong tên lớp Java, vì vậy Clojure chuyển đổi chúng thành dấu gạch dưới. Nó cũng chuyển đổi các ký tự như *
thành các từ như _STAR_
.
Bạn có nghĩa là các tệp .class
trên đĩa có dấu gạch dưới trong đó các hàm trong Clojure có bị gạch ngang không? Tôi chắc rằng tôi đọc rằng đó là một cái gì đó để làm với JVM không hỗ trợ dấu gạch ngang trong những tên tập tin. (Hoặc ít nhất nó không phải là một đảm bảo rằng nó hỗ trợ họ.)
Đây chỉ là giới hạn của tên tệp lớp và Clojure âm thầm giải quyết vấn đề này. Mã của riêng bạn vẫn có thể xử lý các tệp có dấu gạch ngang trong tên tệp.
Tôi rất tiếc vì tôi không có tài liệu tham khảo cho điều này ngay bây giờ.
Tôi đã thử đặt dấu gạch ngang trong tệp clj nhưng chương trình clojure của tôi không thể đọc tệp trừ khi tôi thay đổi dấu gạch ngang thành gạch dưới – Zubair
Có, điều này là do giới hạn JVM. Xem http://clojure.org/libs "Dấu gạch ngang trong tên lib được thay thế bằng dấu gạch dưới trong đường dẫn" –
Câu trả lời có nghĩa là gì khi nói "Mã của riêng bạn vẫn có thể xử lý tệp có dấu gạch ngang trong tên tệp". Đây có phải là tệp .clj hoặc tệp .class không? – Zubair
- 1. Tại sao PIP chuyển đổi dấu gạch dưới thành dấu gạch ngang
- 2. Tại sao DisplayFormat có thay đổi DataFormatString "/" (dấu gạch chéo) thành "-" (dấu gạch ngang)?
- 3. Tại sao "_" (gạch dưới) khớp "-" (dấu nối)?
- 4. Python Mô-đun với một dấu gạch ngang, hoặc dấu gạch ngang (-) trong tên của nó
- 5. Chuyển đổi dấu gạch ngang sang CamelCase trong PHP
- 6. chấm: gạch ngang trong tên
- 7. Đặt tên cho thuộc tính HTML "lớp" và "id" - dấu gạch ngang và gạch dưới
- 8. Dấu gạch ngang trong các tên cột trong MySQL DB
- 9. Chữ cái Regex, số, dấu gạch ngang và dấu gạch dưới
- 10. Cách di chuyển tập lệnh từ dấu gạch ngang sang dấu gạch ngang?
- 11. Scala gạch dưới trong tên
- 12. sử dụng (-) dấu gạch ngang trong tên bảng mysql
- 13. Dấu gạch ngang vs Dash: Thay thế Dash với Dấu gạch ngang
- 14. javascript - thay thế dấu gạch ngang (dấu gạch ngang) bằng dấu cách
- 15. Tại sao Resharper đổi tên biến để bắt đầu bằng dấu gạch dưới?
- 16. Làm cách nào để chuyển đổi tên lớp Ruby thành biểu tượng dấu gạch dưới?
- 17. Regex để phù hợp với ký tự chữ, dấu gạch dưới, dấu chấm và dấu gạch ngang, cho phép dấu chấm và dấu gạch ngang chỉ ở giữa
- 18. dấu gạch dưới dẫn đầu trong tên lớp Python
- 19. Sử dụng chữ hoa, dấu gạch ngang hoặc dấu gạch dưới khi đặt tên cho bộ chọn css
- 20. Dấu gạch ngang là gì?
- 21. Tại sao String.Format chuyển đổi dấu gạch chéo về phía trước thành dấu trừ?
- 22. Chuỗi định dạng có dấu gạch ngang
- 23. RewriteRule^- [L] AKA RewriteRule dấu gạch ngang dấu gạch ngang L
- 24. Dấu gạch dưới trong hàm php
- 25. Tại sao auto_increment "được viết" bằng dấu gạch dưới?
- 26. Dấu gạch dưới kép trong PHP?
- 27. Xóa một dấu gạch ngang dài khỏi chuỗi trong JavaScript?
- 28. Làm cách nào để chuyển đổi hai hoặc nhiều dấu gạch ngang thành đĩa đơn và xóa tất cả dấu gạch ngang ở đầu và cuối chuỗi?
- 29. markdown - tôi có thể có dấu gạch dưới w/o thoát chúng và không có dấu gạch ngang đánh dấu?
- 30. Vấn đề với biểu tượng dấu gạch ngang trong powershell
khác với nó không phải là AOT? – Chris
Không. Trình biên dịch Clojure luôn giống nhau. AOT-compilation chỉ ghi các tệp lớp vào đĩa. –