rust-quiz:033-range-full-method.rs
题目
use std::ops::RangeFull;
trait Trait {
fn method(&self) -> fn();
}
impl Trait for RangeFull {
fn method(&self) -> fn() {
print!("1");
|| print!("3")
}
}
impl<F: FnOnce() -> T, T> Trait for F {
fn method(&self) -> fn() {
print!("2");
|| print!("4")
}
}
fn main() {
(|| .. .method())();
}
关键
..
之前就说过..
,不但可以作为匹配模式,可以作为切片索引,还是RangeFull
对于这类数据,需要明确的是,符号可以替换为对象,但是不能直接作为对象使用。
特殊场景需要进行特殊声明。
题解
主要问题在于|| .. .method()
该怎么计算。
划分方式有两种
(|| ..) .method()
: 打印24
|| (.. .method)
:打印1
,因为双重闭包()
不会打印3
可以尝试一下,|| (.. .method())
会提示错误,毫无疑问结果是24
。
但是根据上述的内容,符号和对象转换需要特殊声明,我们只要特殊操作一下即可|| ((..).methid())
,此时就会只打印1
。
答案
24
本作品采用《CC 协议》,转载必须注明作者和本文链接