Trong F # 's printf
có định dạng thông số %A
cho phép truyền vào bất kỳ loại F # nào, và nó sẽ được đánh giá và in.Tại sao% A specifier trong printf của F # không tồn tại trong printf của OCaml?
Như một ví dụ:
type Result<'a> =
| Failure
| Success of 'a
printf "%A" (Success "hello") // prints out 'Success "hello"'
đâu, rõ ràng, Result<'a>
không phải là một built-in loại.
Tôi có thể khai báo kiểu tương tự trong OCaml, nhưng không có thông số tương đương cho Printf.printf
- thay vào đó, tôi sẽ phải triển khai hàm string_of_result
của riêng mình và sử dụng số %s
trong chuỗi định dạng. Hơn nữa, vì đây là một loại đa hình, tôi sẽ phải tạo ra một hàm không đơn giản có thể xử lý bất kỳ thể hiện kiểu nào của 'a
.
Câu hỏi của tôi là - tại sao OCaml thiếu thông số tiện dụng này? Có phải vì không có động lực để thực hiện nó? Có phải bởi vì có một số thiếu mojo dưới mui xe, mà chỉ có trong F #?
Giống như bổ sung: giải pháp này cần xử lý bằng ppx - khi tôi chỉ sao chép và dán mã vào REPL, '' 'pp_result''' vẫn chưa được xác định. –
@ lambda.xy.x - Tôi cũng nhận thấy nó. Đối với một số lý do tôi đã có 'ppx_deriving' được cài đặt thông qua' opam', nhưng bây giờ một lỗi được ném: 'Không thể xác định vị trí deriver show'. – asafc
Vâng, tôi không muốn làm phức tạp câu trả lời thực sự là về các đặc tả 'printf' với các chi tiết về việc xây dựng/cấu hình' ppx_deriving'. (Để tham khảo: trong phần toplevel, '#use 'topfind" 'và sau đó' #require "ppx_deriving.show" '. Nhưng xem tài liệu' ppx_deriving' để biết chi tiết.) – gsg