分解从整数中减去范围在Rust中的工作方式
Rust Book的列表中包含以下for循环: 12..buffer.len()中的i的分解从整数中减去范围在Rust中的工作方式,rust,range,Rust,Range,Rust Book的列表中包含以下for循环: 12..buffer.len()中的i的{ 让预测=系数 .国际热核实验堆(iter) .zip(&buffer[i-12..i]) .map(|(&c,&s)| c*s作为i64) .sum::() } 除了“I-12..I”位之外,我理解它的作用。我不知道你可以从一个整数中减去一个范围得到。。。又回来了吗 我使用示例来了解这种语法是如何根据经验工作的: println!("\"3 - 3..4\": {:?}", 3 - 3..4); 普林顿
{
让预测=系数
.国际热核实验堆(iter)
.zip(&buffer[i-12..i])
.map(|(&c,&s)| c*s作为i64)
.sum::()
}
除了“I-12..I”位之外,我理解它的作用。我不知道你可以从一个整数中减去一个范围得到。。。又回来了吗
我使用示例来了解这种语法是如何根据经验工作的:
println!("\"3 - 3..4\": {:?}", 3 - 3..4);
普林顿!("\"3 - 3..3\": {:?}", 3 - 3..3);
普林顿!("\"3 - 3..2\": {:?}", 3 - 3..2);
普林顿!("\"3 - 3..1\": {:?}", 3 - 3..1);
普林顿!("\"3 - 3..0\": {:?}", 3 - 3..0);
其中打印:
"3 - 3..4": 0..4
"3 - 3..3": 0..3
"3 - 3..2": 0..2
"3 - 3..1": 0..1
"3 - 3..0": 0..0
因此,一个简单的答案是,从整数中减去一个范围将产生一个范围,该范围从零开始,以整数与范围长度(正或负)之差结束
这是一个很好的解释吗?使这种语法成为可能的特征是什么?这是因为,当缺少括号时,它定义了比其他运算符更紧密的运算符绑定,即,如果您编写a+b*c
,它是否被解释为(a+b)*c
或a+(b*c)
在本例中,您只使用减号和范围,但问题是相同的,a-b..c
被解释为(a-b)…c
或a-(b..c)
?是前者。因此,当您编写3-3..4
时,它会被解释为(3-3)..4
,这就是为什么它会导致从0..4
的范围
如果您尝试显式地将括号括在范围内,如
3-(3..4)
,那么编译器将错误地说,{integer}的Sub实际上没有首先实现
如果有疑问,请将操作括在括号中。只是一个提示:您可以使用dbg!(…)
宏以避免重复。例如,dbg!(3-3..4)
输出:3-3..4=0..4
哦,很高兴知道