我想创建一个带有'a'..'z'值(包括)的向量.
这不编译:
let vec: Vec<char> = ('a'..'z'+1).collect();
Run Code Online (Sandbox Code Playgroud)
什么是惯用的方式'a'..'z'?
Rust Book的Operators and Symbols附录列出了两个都是右包含范围的运算符:
| 操作员 | 例子 | 解释 |
|---|---|---|
..= |
..=expr, expr..=expr |
包含右侧的范围字面量 |
... |
expr...expr |
在模式中:包含范围模式 |
这两个运营商有什么区别?或者,换种说法,范围文字和范围模式之间有什么区别?
'In a pattern' 表示expr...expr必须在匹配表达式中使用,expr..=expr而不应该使用。为什么是这样?
我正在尝试迭代所有可能的byte(u8)值.不幸的是在我的范围内的文字0..256被强制转换为u8和256溢出:
fn foo(byte: u8) {
println!("{}", byte);
}
fn main() {
for byte in 0..256 {
foo(byte);
println!("Never executed.");
}
for byte in 0..1 {
foo(byte);
println!("Executed once.");
}
}
Run Code Online (Sandbox Code Playgroud)
以上编译:
warning: literal out of range for u8
--> src/main.rs:6:20
|
6 | for byte in 0..256 {
| ^^^
|
= note: #[warn(overflowing_literals)] on by default
Run Code Online (Sandbox Code Playgroud)
第一个循环体永远不会被执行.
由于演员阵容,我的解决方法非常难看并且感觉很脆弱:
for short in 0..256 {
let _explicit_type: u16 = short;
foo(short as u8); …Run Code Online (Sandbox Code Playgroud) rust ×3