Я пытаюсь создать конструктор new
с одним и двумя аргументами, но я не могу понять, как это сделать. Возможно ли это на данный момент?Можно ли перегрузить функцию с различными числами аргументов (используя черты)
То, что я теперь дает мне ошибку, что несколько применимые элементы находятся в области видимости (playground)
trait __Constructor1<T> {
fn new(T) -> Self;
}
trait __Constructor2<T, U> {
fn new(T, U) -> Self;
}
enum MixedInts {
SmallInt(i32),
TwoSmallInts(i32, i32),
}
impl __Constructor1<i32> for MixedInts {
fn new(__0: i32) -> MixedInts {
MixedInts::SmallInt(__0)
}
}
impl __Constructor2<i32, i32> for MixedInts {
fn new(__0: i32, __1: i32) -> MixedInts {
MixedInts::TwoSmallInts(__0, __1)
}
}
fn main() {
let x = MixedInts::new(2i32);
let y = MixedInts::new(2i32, 2i32);
}
Я знаю, что вы только что пытались создать небольшой пример .. но использование черта здесь довольно бесполезно. Немного повернув ваш пример на голове, я [видел эту технику, используемую в нескольких кодах) (https://play.rust-lang.org/?gist=2ae7e995af81de014bd8a59971021649&version=stable&backtrace=0). –
@SimonWhitehead Я не уверен, что ваш код должен достичь. Он не принимает другое количество аргументов вообще и по какой-то причине создает вместо второго перечисления второй тип. – JelteF
Цель состоит в том, чтобы продемонстрировать _use enum_ как способ «перегрузить» функцию. Вы можете использовать вариант перечисления для передачи в функцию различных чисел аргументов. Таким образом, он переворачивает ваш пример с его помощью, используя enum как механизм для «перегрузки». Я просто использовал структуру в качестве примера, чтобы подчеркнуть, что перечисление в моем примере является основной частью. –