2010-04-07 9 views
9

Załóżmy, że chcesz mieć coś w rodzaju variadic templates (możliwość definiowania parametrów typu n dla klasy ogólnej) w Scali.Emulacja szablonów variadycznych w Scali

Na przykład nie chcesz definiować Tuple2[+T1, +T2] i Tuple3[+T1, +T2, +T3], ale Tuple[T*].

Czy istnieją inne opcje niż HLists, które wspierałyby produkt Tuple, produkt i funkcję?

+2

Zakładam, że możesz przetasować własną wersję HList, ale dlaczego? Czy możesz wskazać, w jaki sposób twoja wyobrażona opcja różni się od HList? –

+0

Definicja typu po stronie użytkownika jest nieco skomplikowana, jak na mój gust. Idealne rozwiązanie pozwoliłoby na bardziej naturalną definicję typu Tuple [T1, T2, T3] podobną do TupleX już w bibliotekach Scala. Dodatkowo powinna obsługiwać inne typy, takie jak funkcja i produkt. –

+0

Ale Scala już oferuje, a HList używa, trochę cukru syntaktycznego, aby zmniejszyć tę złożoność. Na przykład zobacz definicję tego typu z linku HList: 'val list: Int :: String :: Boolean :: HNil = ...'. –

Odpowiedz

3

W tej chwili nie ma żadnej syntaktycznej konstrukcji w Scali, która pozwala na to, co sugerujesz. Jest to również powód, dla którego istnieje 22 klasy Tuple (Tuple2, Tuple3, ..., Tuple22), a także różne klasy funkcji (Function0, ...).

+5

To pytanie sugeruje, że nie istnieje konstrukcja języka. –