new
コンストラクタを1つ2つの引数で使用しようとしていますが、これを行う方法がわかりません。現時点でも可能ですか?私が今持っている何異なる数の引数を持つ関数をオーバーロードすることは可能ですか(形質を使用します)
はそれがなく、実用的だ方法で、技術的に可能である私の範囲内にある複数の該当項目というエラー(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私はあなたのコードが達成するはずのものがわかりません。引数の数はまったく受け入れず、何らかの理由で列挙型の代わりに第2の型を作成します。 – JelteF
この目的は、enum_の_useを関数の「オーバーロード」の方法として示すことです。列挙型を使用して、さまざまな数の引数を関数に渡すことができます。したがって、 "オーバーロード"のメカニズムとして列挙型を使用することで、その頭の上にあなたの例を反転させます - 私は例として列挙型が主要な部分であることを強調する例として構造体を使用しました。 –