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 协议》,转载必须注明作者和本文链接