Tôi không thể sử dụng print_endline
vì nó yêu cầu một chuỗi và tôi không (nghĩ) tôi có bất kỳ cách nào để chuyển đổi các kiểu dữ liệu do người dùng xác định rất đơn giản thành chuỗi. Làm thế nào tôi có thể kiểm tra các giá trị của các biến của các kiểu dữ liệu này?Có cách nào để in các kiểu dữ liệu do người dùng định nghĩa trong ocaml không?
Trả lời
Trong nhiều trường hợp, không khó để viết thói quen chuyển đổi chuỗi_of_ của riêng bạn. Đó là một lựa chọn đơn giản mà không yêu cầu bất kỳ thư viện bổ sung hoặc phần mở rộng OCaml không chuẩn. Đối với các khóa học tôi dạy sử dụng OCaml, đây thường là cơ chế đơn giản nhất cho sinh viên.
(Nó sẽ được tốt đẹp nếu có sự ủng hộ cho một chuyển đổi chung thành các chuỗi mặc dù,. Có lẽ là bắt nguồn thứ OCaml sẽ bắt trên)
Không có ngôn ngữ cơ bản nào thực hiện điều này cho bạn. Có một dự án có tên là OCaml Deriving (được đặt tên theo một tính năng của Haskell) có thể tự động lấy được các chức năng in từ các khai báo kiểu. Tôi đã không sử dụng nó, nhưng nó có vẻ tuyệt vời.
http://code.google.com/p/deriving/
Một khi bạn có một hàm để in loại của bạn (có nguồn gốc hay không), bạn có thể cài đặt nó trong top-level ocaml. Điều này có thể hữu ích, vì việc in ấn ở mức cao nhất đôi khi không thực hiện được những gì bạn muốn. Để thực hiện việc này, hãy sử dụng chỉ thị #install-printer
, được mô tả trong Chapter 9 of the OCaml Manual.
Có chức năng thư viện của bên thứ ba như dump
trong pin OCaml Bao gồm hoặc OCaml Extlib, sẽ biến đổi chung bất kỳ giá trị nào thành chuỗi bằng cách sử dụng tất cả thông tin thời gian chạy mà nó có thể nhận được. Nhưng điều này sẽ không thể phục hồi tất cả thông tin; ví dụ, tên hàm dựng bị mất và trở thành chỉ số nguyên, vì vậy nó sẽ không chính xác theo cách bạn muốn. Về cơ bản bạn sẽ phải viết các chức năng chuyển đổi của riêng bạn, hoặc sử dụng một số công cụ sẽ viết chúng cho bạn.
Dọc theo dòng câu trả lời trước, ppx_sexp là một PPX để tạo ra máy in từ định nghĩa kiểu. Dưới đây là một ví dụ về cách sử dụng nó trong khi sử dụng jbuilder làm hệ thống xây dựng của bạn, và sử dụng Base và Stdio làm stdlib của bạn.
Thứ nhất, tập tin jbuild đó quy định cụ thể như thế nào để thực hiện xây dựng:
(jbuild_version 1)
(executables
((names (w))
(libraries (base stdio))
(preprocess (pps (ppx_jane ppx_driver.runner)))
))
Và đây là các mã.
open Base
open Stdio
type t = { a: int; b: float * float }
[@@deriving sexp]
let() =
let x = { a = 3; b = (4.5,5.6) } in
[%sexp (x : t)] |> Sexp.to_string_hum |> print_endline
Và khi bạn chạy nó, bạn nhận được kết quả này:
((a 3) (b (4.5 5.6)))
S-biểu hiện chuyển đổi có mặt trên khắp cơ sở và tất cả các thư viện liên quan (stdio, Core_kernel, Core, async, Incremental vv), và vì vậy bạn có thể đếm khá nhiều vào việc có thể sắp xếp bất kỳ cấu trúc dữ liệu nào bạn gặp phải ở đó, cũng như bất kỳ thứ gì bạn tự định nghĩa.
- 1. MySQL có hỗ trợ kiểu dữ liệu do người dùng định nghĩa
- 2. Có cách nào để hiển thị định nghĩa kiểu liệt kê do người dùng định nghĩa không?
- 3. Truyền một kiểu bảng do người dùng định nghĩa giữa cơ sở dữ liệu SQL Server
- 4. Các loại dữ liệu do người dùng định nghĩa trong SQL Server có hiệu quả như thế nào?
- 5. Loại dữ liệu UML do người dùng định nghĩa trong Visio 2010
- 6. Cách đặt kiểu dữ liệu do người dùng xác định vào từ điển
- 7. Các hàm do người dùng định nghĩa SQLite trong Lisp
- 8. Có thể tạo các phương thức * có giá trị * trong một kiểu SQL CLR do người dùng định nghĩa không?
- 9. Tạo một giá trị ngẫu nhiên từ một kiểu dữ liệu do người dùng định nghĩa trong Haskell
- 10. Kiểu dữ liệu CLR do người dùng xác định trong Cơ sở dữ liệu SQL Azure của Windows
- 11. Kiểm tra xem Haskell biến phù hợp với lựa chọn kiểu dữ liệu do người dùng định nghĩa
- 12. Riêng biệt() trả về các bản sao với một kiểu do người dùng định nghĩa
- 13. Các hàm do người dùng định nghĩa với LessCSS?
- 14. Gỡ lỗi các hàm do người dùng định nghĩa PostgreSQL
- 15. danh sách hiển thị mysql của các hàm do người dùng định nghĩa trong phpmyadmin
- 16. Số lượng đối số không xác định cho các hàm do người dùng định nghĩa SQL?
- 17. "kiểu người dùng định nghĩa không được định nghĩa" cho đơn giản kiểu tùy chỉnh
- 18. Làm thế nào để quá tải các hàm do người dùng định nghĩa trong Matlab?
- 19. Làm thế nào để sử dụng các hàm do người dùng SQL định nghĩa trong .NET?
- 20. Có cách nào để liên kết mô tả tệp với dữ liệu do người dùng xác định không?
- 21. Có thể sử dụng biến MySql do người dùng định nghĩa trong .NET MySqlCommand không?
- 22. static_cast cho các loại do người dùng xác định
- 23. Có cách nào để nhận các biến do người dùng khai báo trong PHP không?
- 24. LINQ to SQL với các thủ tục lưu sẵn và tham số kiểu bảng do người dùng định nghĩa
- 25. Cách sử dụng hàm do người dùng định nghĩa trong SQL từ một db khác
- 26. Các lớp giá trị do người dùng định nghĩa trông như thế nào từ Java?
- 27. Physical Boost.Units Literals do người dùng định nghĩa
- 28. Tự động tạo kiểu bảng do người dùng xác định khớp với bảng hiện có
- 29. cách tự động tải các hàm do người dùng định nghĩa trong mathematica
- 30. Làm cách nào để thêm hàm SQL do người dùng định nghĩa vào khung thực thể?
http://stackoverflow.com/questions/7442449/ocaml-polymorphic-print-and-type-losing – ygrek
http://stackoverflow.com/questions/7380755/ocaml-get-values-type-name – ygrek