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

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