我正在為自然數創建一個簡單的特征,Nat其中一個實作為u64. 當我使用這個特性并使用一個帶有型別注釋的操作時,它會確定要使用什么實作。但是,當我為復合運算式指定型別時,Rust 無法編譯該運算式。
pub trait Nat {
fn one() -> Self;
fn succ(self) -> Self;
}
impl Nat for u64 {
fn one() -> Self { 1 }
fn succ(self) -> Self { return self 1; }
}
#[test]
fn test_adder() {
// Works well
assert_eq!(4, 3.succ());
let just_1: u64 = Nat::one();
assert_eq!(just_1, 1);
// Doesn't work
let just_2: u64 = Nat::one().succ();
}
uj5u.com熱心網友回復:
您可以進行完全限定的呼叫,指定型別:
let just_2: u64 = <u64 as Nat>::one().succ();
或者只使用型別本身并讓編譯器推斷特征方法:
let just_2: u64 = u64::one().succ();
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449168.html
