Rust 参考目前说了以下内容the as操作员 https://doc.rust-lang.org/reference.html#type-cast-expressions:
7.2.12.5 类型转换表达式
类型转换表达式用二元运算符表示as
.
执行一个as
表达式将左侧的值转换为右侧的类型。
一个例子as
表达:
fn average(values: &[f64]) -> f64 {
let sum: f64 = sum(values);
let size: f64 = len(values) as f64;
sum / size
}
(另外,因为它是相关的:
7.2.12.8 运算符优先级
Rust 二元运算符的优先级顺序如下,从强到弱:
as
* / %
+ -
<< >>
)
天真地使用它作为运算符似乎不起作用:
fn main() {
let x = 100 as u16 << 8;
}
实际上并没有编译:
% rustc testing.rs
testing.rs:2:24: 2:25 error: expected type, found `8`
testing.rs:2 let x = 100 as u16 << 8;
带括号——let x = (100 as u16) << 8;
——它编译了。参考文献中的示例中不需要括号,但此处似乎需要括号。这里的确切语法是什么?是否需要括号,除非这是唯一正确的事情=
?或者我只是做错了什么?
It is a bit weird that this is called an operator, as the RHS would seem to need to be a type, and typically, I think of an operator as taking two expressions…
这里的技巧是as
在其右侧采用类型,即语法as
看起来像:是expression 'as' type
。后面的表达式为as
看起来有点像类型(的开始),它正在尝试解析u16<<...
as if u16
有一个类型参数(带有这样的前缀的类型的示例是Foo<<T>::Bar>
).
这基本上只是特定的行为<<
因为它看起来像类型参数分隔符。如果使用的运算符不能出现在类型中的前导标识符之后,则它可以正常工作:
fn main() {
let x = 100 as u16 - 8;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)