Tôi có câu hỏi: Làm cách nào để ghi đè phương thức hiển thị cho Chuỗi hoặc Char? Cảm ơn.Ghi đè phương thức hiển thị cho Chuỗi/Char trong Haskell
Trả lời
Nếu bạn muốn làm điều này, thì bạn đang làm sai.
Vì lý do kỹ thuật hơn, hãy xem my answer cho câu hỏi trước.
Bạn thực sự nên sử dụng một trong hai a -> String
chức năng của riêng bạn (có thể thông qua loại-class của riêng bạn) hoặc sử dụng một thư viện khá-in cho kết quả đầu ra chi tiết hơn (một số trong đó đã có một Pretty
lớp sẵn có).
Kể từ khi mọi người dường như thích nhận xét của tôi, ở đây nó là như một câu trả lời:
Nếu bạn muốn reimplement các lớp học kiểu trên các loại hiện có, bạn có thể bọc chúng trong một loại -declared newtype
. Điều này cho phép bạn xác định các triển khai của riêng bạn, mà không có bất kỳ chi phí thực tế nào khi chạy (vì newtype
là đẳng cấu đối với kiểu gốc, không có thực hiện boxing nào khi chạy).
này có thể giống như thế này:
newtype MyChar = MyChar Char
instance Show MyChar where
show (MyChar c) = "head \"" ++ c : "\""
Bạn có thể sử dụng điều này bằng cách gói Char
s với MyChar
, như vậy:
print $ fmap MyChar "test"
này sẽ in ra
[head "t",head "e",head "s",head "t"]
Bạn cũng có thể xác định showList, sau đó danh sách MyChar cũng sẽ có định dạng tùy chỉnh. Trong thực tế, đây là lý do tại sao hiển thị danh sách các ký tự ([Char]) hoạt động khác với hiển thị các danh sách khác ([a]). – sdcvvc
- 1. Ghi đè phương thức ghi đè (C#)
- 2. Ghi đè từInteger trong Haskell
- 3. Ghi đè đăng ký ghi đè Tạo Phương thức
- 4. Hiển thị POJO với Hộp kết hợp JavaFX 2 mà không ghi đè phương thức toString()
- 5. Gọi phương thức ghi đè, siêu lớp cuộc gọi đã ghi đè phương thức
- 6. Ghi đè so với phương thức ẩn
- 7. C# Ghi đè phương thức GetHashCode
- 8. ghi đè bằng phương thức() của Pair
- 9. breezejs: ghi đè tên hiển thị
- 10. Django - Ghi đè phương thức Model.create()?
- 11. Ghi đè phương thức ở cấp độ
- 12. Ghi đè phương thức với đối tượng
- 13. Ghi đè phương thức gửi của XMLHttpRequest
- 14. Ghi đè phương thức trợ giúp tuyến đường
- 15. Ghi đè phương thức bằng so với phương pháp mới
- 16. Nhận xét về phương thức ghi đè và bị ghi đè cùng lúc trong C#?
- 17. Ghi đè phương thức toString trong Liệt kê Scala
- 18. Cách "ghi đè" các phương thức mở rộng trong .NET?
- 19. ghi đè phương thức đệ quy trong python
- 20. Phương thức fetch() ghi đè trong mô hình xương sống
- 21. Cuộc gọi phương thức ghi đè trong Ruby?
- 22. Sự khác biệt giữa phương thức hiển thị và phương thức hiển thị
- 23. Từ khoá 'ghi đè' chỉ là một kiểm tra cho một phương thức ảo bị ghi đè?
- 24. Tìm phương pháp ghi đè
- 25. Có thể ghi đè phương thức không phải ảo không?
- 26. ghi đè một phương thức sử dụng một lớp học
- 27. Các phương pháp ghi đè trong JavaDoc
- 28. có thể đánh dấu phương thức ghi đè là
- 29. Xác thực jQuery - Ghi đè phương thức xác thực lõi
- 30. Phương thức cơ sở cuộc gọi thay vì ghi đè
Có lý do nào khiến bạn không muốn chỉ xác định một số chức năng khác của loại 'Char -> String' hoặc' String -> String'? Tại sao bạn muốn ghi đè lên 'show'? – hammar
Tôi nghĩ bạn phải bọc nó trong một [loại mới] (http://www.haskell.org/haskellwiki/Newtype) và xác định Hiển thị cho loại đó. –