我試圖讓一個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
其目的是爲了演示enum_的使用,以此來「超載」函數。您可以使用枚舉變體將不同數量的參數傳入該函數。所以它通過使用枚舉作爲「超載」機制來翻轉你的例子 - 我只是用一個結構作爲例子來強調我的例子中的枚舉是主要部分。 –