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

题目

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!