2010-04-07 4 views
9

Giả sử bạn muốn có một cái gì đó như variadic templates (khả năng xác định các thông số kiểu n cho một lớp chung) trong Scala. Ví dụ: bạn không muốn xác định Tuple2[+T1, +T2]Tuple3[+T1, +T2, +T3] nhưng Tuple[T*].Giả lập các mẫu biến thể trong Scala

Có các tùy chọn nào khác ngoài HLists có hỗ trợ Tuple, Sản phẩm và chức năng không?

+2

Tôi cho rằng bạn có thể cuộn phiên bản HList của riêng bạn, nhưng tại sao? Bạn có thể chỉ ra cách lựa chọn được hình dung của bạn sẽ khác với một HList không? –

+0

Định nghĩa kiểu ở phía người dùng hơi phức tạp đối với khẩu vị của tôi. Một giải pháp lý tưởng sẽ cho phép một Tuple định nghĩa kiểu tự nhiên hơn [T1, T2, T3] giống như TupleX đã làm trong libs Scala. Ngoài ra, nó sẽ hỗ trợ các loại khác như Chức năng và Sản phẩm. –

+0

Nhưng Scala đã cung cấp, và sử dụng HList, một số cú pháp đường để giảm sự phức tạp đó. Ví dụ, xem định nghĩa kiểu này từ liên kết HList: 'val list: Int :: String :: Boolean :: HNil = ...'. –

Trả lời

3

Hiện tại không có cấu trúc cú pháp nào trong Scala cho phép bạn đang đề xuất điều gì. Đó cũng là lý do tại sao có 22 lớp Tuple (Tuple2, Tuple3, ..., Tuple22) và cũng có các lớp Function khác nhau (Function0, ...).

+5

Câu hỏi ngụ ý rằng không có cấu trúc ngôn ngữ. –