Cú pháp ghi có vẻ cực kỳ tiện lợi so với việc phải viết các hàm truy cập của riêng bạn. Tôi chưa bao giờ thấy bất kỳ ai đưa ra bất kỳ hướng dẫn nào về cách tốt nhất là sử dụng cú pháp bản ghi trên cú pháp khai báo dữ liệu thông thường, vì vậy tôi sẽ hỏi ở đây.Khi nào tôi nên sử dụng cú pháp bản ghi để khai báo dữ liệu trong Haskell?
Trả lời
Bạn nên sử dụng cú pháp kỷ lục trong hai tình huống:
- Loại có nhiều lĩnh vực
- Việc kê khai loại mang đến cho không có đầu mối về cách bố trí như dự kiến
Ví dụ một loại điểm có thể đơn giản được khai báo là:
data Point = Point Int Int deriving (Show)
Rõ ràng là lần đầu tiên trong t biểu thị tọa độ x và cột thứ hai là viết tắt của y. Nhưng trường hợp với việc kê khai loại sau đây là khác nhau (lấy từ Learn You a Haskell for Great Good):
data Person = Person String String Int Float String String deriving (Show)
Cách bố trí loại dự định là: tên, họ cuối cùng, tuổi tác, chiều cao, số điện thoại, và hương vị kem yêu thích. Nhưng điều này không hiển nhiên trong tuyên bố trên. Cú pháp ghi có ích ở đây:
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
, height :: Float
, phoneNumber :: String
, flavor :: String
} deriving (Show)
Cú pháp ghi làm cho mã dễ đọc hơn và được lưu rất nhiều bằng cách tự động xác định tất cả các hàm truy cập cho chúng tôi!
Ngoài dữ liệu đa trường phức tạp, newtype
s thường được xác định bằng cú pháp bản ghi. Trong một trong các trường hợp này, không có bất kỳ nhược điểm nào khi sử dụng cú pháp bản ghi, nhưng trong trường hợp các loại tổng hợp, các trình truy cập bản ghi thường không có ý nghĩa. Ví dụ:
data Either a b = Left { getLeft :: a } | Right { getRight :: b }
là hợp lệ, nhưng các chức năng accessor là phần - đó là một lỗi để viết getLeft (Right "banana")
. Vì lý do đó, những người truy cập như vậy thường không được khuyến khích; một cái gì đó như getLeft :: Either a b -> Maybe a
sẽ phổ biến hơn và điều đó sẽ phải được xác định thủ công. Tuy nhiên, lưu ý rằng accessors có thể chia sẻ tên:
data Item = Food { description :: String, tastiness :: Integer }
| Wand { description :: String, magic :: Integer }
Bây giờ description
là tổng, mặc dù tastiness
và magic
cả vẫn là không.
- 1. Khi nào tôi nên sử dụng cú pháp "(function() {...})();"?
- 2. Cú pháp ghi Haskell và loại lớp
- 3. Tôi nên sử dụng trình phân tích cú pháp RSS nào trong PHP?
- 4. Tôi nên sử dụng loại dữ liệu nào để lưu trữ GUID trong Dữ liệu chính?
- 5. Cú pháp khai báo mảng C# so với cú pháp khai báo mảng C++
- 6. Khi nào tôi nên sử dụng trình phân tích cú pháp?
- 7. Khi nào tôi nên thận trọng khi sử dụng liên kết dữ liệu trong .NET?
- 8. Haskell Newtype cú pháp
- 9. Khi nào tôi nên sử dụng AQL?
- 10. Tôi nên sử dụng cơ sở dữ liệu nào để sử dụng cho dự án nhà?
- 11. Cú pháp haskell này là gì?
- 12. Tôi có nên khai báo các phương pháp này không?
- 13. cú pháp VIM cao ánh sáng nghẹn trong file CSS sử dụng dữ liệu: image
- 14. Khi nào bạn nên sử dụng JCR và khi nào bạn nên sử dụng JPA/RDBMS?
- 15. Khi nào/tại sao tôi nên bắt đầu sử dụng cơ sở dữ liệu?
- 16. Khi nào tôi nên triển khai __call__
- 17. Cách tốt nhất để truy cập vào các trường hợp bảng khi sử dụng cú pháp khai báo SQLAlchemy của
- 18. Sử dụng các kiểu dữ liệu trong Haskell
- 19. Khi nào tôi nên sử dụng setUserState trong Joomla?
- 20. Khai báo mảng chuỗi lạ Cú pháp
- 21. Tôi có nên sử dụng các giao dịch SQL, trong khi đọc các bản ghi?
- 22. Khi nào tôi nên sử dụng stdClass và khi nào tôi nên sử dụng một mảng trong mã php oo?
- 23. Tôi có nên sử dụng tệp văn bản hoặc Cơ sở dữ liệu không?
- 24. Khi nào tôi nên sử dụng GC.SuppressFinalize()?
- 25. Làm cách nào để sử dụng các cú pháp để đọc bộ ghi nhiệt độ iButton?
- 26. Khi nào tôi nên sử dụng ConcurrentSkipListMap?
- 27. Tôi nên sử dụng cơ sở dữ liệu nào để lưu trữ hồ sơ và tôi nên sử dụng nó như thế nào?
- 28. Khi nào tôi nên sử dụng Bảng chỉ mục của Oracle? Hoặc, khi tôi không nên?
- 29. Khi nào tôi không nên sử dụng dấu chấm phẩy?
- 30. Khi nào bạn KHÔNG nên sử dụng dấu hoa thị (*) khi khai báo một biến trong Mục tiêu C
Bạn cũng có thể sử dụng cú pháp bản ghi thú vị trong đơn vị 'State', trong đó' runState' được sử dụng như một chút thông minh cú pháp. – jberryman
Bạn có thể tận dụng hệ thống kiểu và sử dụng loại răng cưa như 'loại FirstName = Chuỗi loại LastName = Chuỗi loại Tuổi = Int loại Chiều cao = Float loại PhoneNumber = Chuỗi loại Flavor = Chuỗi dữ liệu Person = Person FirstName LastName Độ cao Tuổi PhoneNumber Flavor xuất hiện (hiển thị) ' Vì vậy, đối số của bạn không hợp lệ. – yaccz