std.conv.to!string(enum.member)
hoạt động như thế nào? Làm thế nào có thể một hàm nhận một thành viên enum và trả về tên của nó? Liệu nó sử dụng một phần mở rộng trình biên dịch hoặc một cái gì đó tương tự? Đó là một chút bình thường với tôi kể từ khi tôi đến từ thế giới C/C++.Làm thế nào để chuỗi! (Enum.member) hoạt động?
Trả lời
Những gì nó làm là sử dụng phản ánh thời gian biên dịch trên loại enum để nhận danh sách thành viên (tên dưới dạng chuỗi) và giá trị của chúng. Nó xây dựng một câu lệnh chuyển đổi từ thông tin này để tra cứu nhanh để lấy tên từ một giá trị. to!SomeEnum("a_string")
sử dụng nguyên tắc tương tự, chỉ theo một hướng khác.
Thông tin phản ánh thời gian biên dịch được truy cập với __traits(allMembers, TheEnumType)
, trả về danh sách các chuỗi có thể được lặp lại để xây dựng câu lệnh chuyển đổi. Sau đó, __traits(getMember, TheEnumType, memberName)
được sử dụng để tìm nạp nội dung.
đặc điểm có thể được nhìn thấy hơn ở đây: http://dlang.org/traits.html#allMembers
Đó allMembers
một hoạt động trên nhiều loại, không chỉ các lớp học như đã thấy trong ví dụ này, mà còn cấu trúc, sự đếm, và nhiều hơn nữa, ngay cả mô-đun.
Mã phobos nguồn có một số ví dụ như EnumMembers
trong std.traits
: https://github.com/D-Programming-Language/phobos/blob/master/std/traits.d#L3360
dù nguồn phobos là kinda khó đọc, nhưng trên dòng 3399, ở dưới cùng của chức năng đó, bạn có thể thấy nó bằng cách sử __traits(allMembers)
như nguồn dữ liệu của nó. std.conv.to
được triển khai theo nhiều chức năng std.traits
.
Bạn cũng có thể kiểm tra các chương mẫu tab để có được những chương Reflection ra sách dạy nấu các D của tôi mà thảo luận về công cụ này quá:
http://www.packtpub.com/discover-advantages-of-programming-in-d-cookbook/book
Ví dụ cuối cùng trong chương cho thấy làm thế nào để sử dụng một số khả năng phản chiếu để xây dựng một bộ điều phối chức năng nhỏ dựa trên các chuỗi. Các chương sau (không có sẵn miễn phí mặc dù) cho thấy làm thế nào để xây dựng một chuyển đổi ra khỏi nó cho hiệu quả tốt hơn quá. Nó thực sự khá dễ dàng: chỉ cần đặt các câu lệnh case
bên trong foreach
qua dữ liệu thời gian biên dịch và trình biên dịch D sẽ hủy sau đó tối ưu hóa bảng tra cứu cho bạn!
- 1. Làm thế nào để getchar() hoạt động?
- 2. Làm thế nào để js.erb hoạt động
- 3. Làm thế nào để `isInstanceOf` hoạt động?
- 4. Làm thế nào để .insert hoạt động?
- 5. Làm thế nào để .ToUpper() hoạt động?
- 6. Làm cách nào để nhận số lượng chuỗi hoạt động?
- 7. Làm thế nào để làm cho Django slugify hoạt động đúng với chuỗi Unicode?
- 8. Làm thế nào để -performSelector: withObject: afterDelay: hoạt động?
- 9. Làm thế nào để lặp lại chuỗi hoạt ảnh SVG?
- 10. Làm thế nào để làm cho javascript này hoạt động?
- 11. Chuỗi hoạt động như thế nào trong bảng Rainbow?
- 12. Làm thế nào để viết idempotent hoạt động ghi?
- 13. Làm thế nào để làm cho RibbonApplicationMenuBar không hoạt động/hoạt động?
- 14. Chuỗi con nên hoạt động như thế nào?
- 15. Thay thế chuỗi C# không hoạt động
- 16. Tương tự về chuỗi: Bitap hoạt động như thế nào?
- 17. Cách chuỗi ứng dụng JavaFX hoạt động như thế nào?
- 18. Chuỗi bình đẳng hoạt động như thế nào trong JavaScript?
- 19. Làm thế nào Hibernate.initialize() hoạt động
- 20. Làm thế nào để rob key fobs hoạt động?
- 21. Làm thế nào để __contains__ hoạt động cho ndarrays?
- 22. Làm thế nào để một khuôn khổ mocking hoạt động?
- 23. Làm thế nào để dừng tkinter sau khi hoạt động?
- 24. CORS với Dart, làm thế nào để nó hoạt động?
- 25. Làm thế nào để VirtualEnv TensorFlow hoạt động trong PyCharm?
- 26. Làm thế nào để đệm PCap unix hoạt động?
- 27. Làm thế nào để HashSets trong Java hoạt động?
- 28. Làm thế nào để theo dõi đúng hoạt động
- 29. Làm thế nào để `db.serialize` hoạt động trong` node-sqlite3`
- 30. Làm thế nào để tensorflow batch_matmul hoạt động?