Rust không có HKT, nhưng lặp của nó làm hỗ trợ mã hóa trong một phong cách chức năng với chức năng bậc cao (HOF) như map
, filter
, fold
vv với chaining thuận tiện.
Chi tiết khác so với ngôn ngữ chức năng - thường được thu thập rác, trong khi các chương trình Rust xử lý bộ nhớ theo cách xác định, tương tự như C++ RAII - như một phần của luồng chương trình.
Để cho phép chuỗi hiệu quả, các mẫu biểu thức lười trở lại hỗn hợp của HOF riêng lẻ và bạn có thể chuyển kết quả cuối cùng thành dữ liệu (phân bổ và đánh giá trong một bước) bằng cách kết thúc với .to_owned_vec()
hoặc .collect()
hoặc bất kỳ thứ gì.
Trong một số trường hợp, điều này không cần thiết, mẫu biểu thức được trả lại là bản thân trình lặp và có thể là đủ. Ví dụ, bạn có thể lặp lại điều đó bằng một vòng lặp for
hoặc chuyển nó thành một đối số cho một hàm chung.
Xem:
mẫu tương tự có thể xảy ra ở cả C++ 11 (với các thư viện bổ sung) và Rust. Các generics của Rust không mạnh bằng các mẫu C++, nhưng bất biến theo mặc định, cú pháp định hướng biểu thức, các lambdas đa hình, và suy luận kiểu hai chiều tạo cho nó cảm giác gần gũi hơn với một ngôn ngữ chức năng.
Về 'phương pháp mở rộng' và cú pháp cuộc gọi thống nhất, Rust cho phép cách tổ chức mã 'thế giới mở' tương tự. Bạn có thể thêm impl
s với nhiều phương thức hơn cho bất kỳ loại nào ở bất kỳ đâu trong thư viện hoặc chương trình hoặc mở rộng các loại hiện có từ các thư viện khác bằng cách triển khai các phương pháp của riêng bạn.
Điều này làm cho việc sử dụng kiểu gọi phương thức có thể chuỗi dễ dàng hơn so với trong C++ (nghĩa là ít cần phải sửa đổi hoặc lấy được các loại).
Ghi nhớ rất nhiều thành ngữ của Haskell phải làm với độ tinh khiết (ví dụ: đơn nguyên IO, thấu kính ..) và Rust là đa mô hình, không thuần túy. Bạn có thể có một hàm thuần túy cho các lợi ích của tính minh bạch tham chiếu ở cấp chương trình, và việc thực hiện nó được đơn giản hóa bởi các biến cục bộ có thể thay đổi được.
Kiểm tra macro này có thể lấy được HKT: https://gist.github.com/14427/af90a21b917d2892eace – CMCDragonkai
Điều đó thật ấn tượng! Mặc dù việc đặt tên của các biến kiểu dường như khá tùy ý. Tôi thậm chí không biết rằng bạn có thể có những đặc điểm với các biến kiểu. Đây là một hack tuyệt vời. –