rust-quiz:029-tuple-trailing-commas.rs

godme發表於2022-07-15
trait Trait {
    fn p(&self);
}

impl Trait for (u32) {
    fn p(&self) { print!("1"); }
}

impl Trait for (i32,) {
    fn p(&self) { print!("2"); }
}

impl Trait for (u32, u32) {
    fn p(&self) { print!("3"); }
}

impl Trait for (i32, i32,) {
    fn p(&self) { print!("4"); }
}

fn main() {
    (0).p();
    (0,).p();
    (0, 0).p();
    (0, 0,).p();
}
  • integer
    為強制型別的數值會自動推導,匹配就近的數值。

  • tuple
    tuple最後攜帶,,標識tuple身份。
    常用於區分(0)(0,),第一個會計算為0
    ()計算語義強於tuple語義時候作為區分,其他時候使用無影響。

  • (0)
    這裡計算語義,並不會強制匹配(i32,),型別自動轉換為u32。列印1

  • (0,)
    這裡標識tuple語義,匹配(i32,),列印2

  • (0, 0)
    不做指定,預設優先匹配i32語義,解析為(i32, i32)。列印4

  • (0,0,)
    逗號只為宣告語義,匹配(i32, i32),列印4
    同理(i32, i32, )只作為語義宣告。

1244

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章