You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中{:?}格式化输出Range为何未展开所有值?

问题解答

首先要明确:Rust中的Range(比如1..5)并不是数组,它是一个惰性迭代器结构体,本身只存储起始值和结束值,不会预先生成所有包含的元素。

{:?}调用的是类型的Debug trait实现,Range的Debug实现就是打印它的区间表示(start..end),而不是展开所有元素——这和数组不同,数组是已经存储了所有元素的集合,所以Debug会输出全部元素。

如果想要用{:?}输出Range的所有元素,需要先把它转换成一个实际存储元素的集合(比如Vec),再打印:

fn main() {
    let myvar = 1..5;
    // 转换成Vec后打印,输出 [1, 2, 3, 4]
    println!("{:?}", myvar.collect::<Vec<_>>());
}

如果想要输出1234这种无分隔的格式,可以通过迭代器拼接字符串:

fn main() {
    let myvar = 1..5;
    let joined = myvar.map(|x| x.to_string()).collect::<Vec<_>>().join("");
    println!("{}", joined); // 输出 1234
}

另外要注意:迭代器只能被消费一次,所以如果先在for循环里用了myvar,之后就不能再调用collect了,反之亦然。

内容的提问来源于stack exchange,提问作者Anon Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:07:04