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
为强制类型的数值会自动推导,匹配就近的数值。tupletuple最后携带,,标识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 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: