История изменений
Исправление red75prim, (текущая версия) :
Ну напишите.
Сначала ответьте на вопрос ниже.
Я прошу вас реализовать хотя бы какое-то подобие вариадика, вы мне пишете все тот же мономорфный код от двух переменных
Расскажите подробно, каким образом полиморфная функция Zip::zip(self)
, принимающая типы вида (T1, ()), (T1, (T2, ())), (T1, (T2, (T3, ()))), - это «мономорфная функция от двух переменных».
Она никак не может быть мономорфной (так как принимает на вход разные типы). У ней один аргумент: self.
Вот её реализация, на всякий случай.
trait Zip {
type Out;
fn zip(self) -> Self::Out;
}
impl<T, U: Zip> Zip for (T, U) {
type Out = Iter<(T, U::Out)>;
fn zip(self) -> Self::Out {
let (t, u) = self;
Iter((t, U::zip(u)))
}
}
impl Zip for () {
type Out = Iter<()>;
fn zip(self) -> Self::Out {
Iter(())
}
}
Если бы была поддержка деконструирования туплов, то 6-я строка выглядела бы как
impl<T, U: Zip> Zip for (T, U...) {
А вызов: Zip::zip((a, b, c))
Исправление red75prim, :
Ну напишите.
Сначала ответьте на вопрос ниже.
Я прошу вас реализовать хотя бы какое-то подобие вариадика, вы мне пишете все тот же мономорфный код от двух переменных
Расскажите подробно, каким образом полиморфная функция Zip::zip(self)
, принимающая типы вида (T1, ()), (T1, (T2, ())), (T1, (T2, (T3, ()))), - это «мономорфная функция от двух переменных».
Она никак не может быть мономорфной (так как принимает на вход разные типы). У ней один аргумент: self.
Вот её реализация, на всякий случай.
trait Zip {
type Out;
fn zip(self) -> Self::Out;
}
impl<T, U: Zip> Zip for (T, U) {
type Out = Iter<(T, U::Out)>;
fn zip(self) -> Self::Out {
let (t, u) = self;
Iter((t, U::zip(u)))
}
}
impl Zip for () {
type Out = Iter<()>;
fn zip(self) -> Self::Out {
Iter(())
}
}
Исправление red75prim, :
Ну напишите.
Сначала ответьте на вопрос ниже.
Я прошу вас реализовать хотя бы какое-то подобие вариадика, вы мне пишете все тот же мономорфный код от двух переменных
Расскажите подробно, каким образом полиморфная функция Zip::zip(self)
, принимающая типы вида (T1, ()), (T1, (T2, ())), (T1, (T2, (T3, ()))), - это «мономорфная функция от двух переменных».
Она никак не может быть мономорфной (так как принимает на вход разные типы). У ней один аргумент: self.
Вот её реализация, на всякий случай.
trait Zip {
type Out;
fn zip(self) -> Self::Out;
}
impl<T, U: Zip> Zip for (T, U) {
type Out = Iter<(T, U::Out)>;
fn zip(self) -> Self::Out {
let (t, u) = self;
Iter((t, U::zip(u)))
}
}
impl Zip for () {
type Out = Iter<()>;
fn zip(self) -> Self::Out {
Iter(())
}
}
Исходная версия red75prim, :
Ну напишите.
Сначала ответьте на вопрос ниже.
Я прошу вас реализовать хотя бы какое-то подобие вариадика, вы мне пишете все тот же мономорфный код от двух переменных
Расскажите подробно, каким образом полиморфная функция Zip::zip(self)
, принимающая типы вида (T1, ()), (T1, (T2, ())), (T1, (T2, (T3, ()))), - это «мономорфная функция от двух переменных».
Она никак не может быть мономорфной (так как принимает на вход разные типы). У ней один аргумент: self.