这段代码:
let a = 1.00000003E-27f32;
let b = 3.19291373E+17f32;
println!("{:e} < {:e}", a/b, std::f32::MIN_POSITIVE);
Run Code Online (Sandbox Code Playgroud)
产生这个结果:
3e-45 < 1.1754944e-38
Run Code Online (Sandbox Code Playgroud)
首先,我期望零,因为它MIN_POSITIVE是最小正常正数。然后我读到了有关次正规数的内容。那么 Rust 打印这个结果是否是因为它是一个次正规数?但是,为什么它不显示为次正规数呢?
我想重载此结构的索引运算符:
struct Ram<'a> {
ram: &'a mut [u8]
}
impl<'a> Ram<'a> {
pub fn new( bytes: &mut[u8]) -> Ram {
Ram {
ram: bytes
}
}
}
Run Code Online (Sandbox Code Playgroud)
...基本上是字节数组上的“控制器”。我这样做是因为我想将它重用于不同大小的字节数组。我知道生命周期在这里是为了确保“ram”引用在整个执行过程中都是有效的。这是我当前的索引代码:
use std::ops::{Index};
impl<'a> Index<usize> for Ram<'a> {
type Output = u8;
fn index(&self, i: usize) -> &'a u8 {
&self.ram[i]
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译。Rust 说有一个匿名生命周期定义与 'a 在 index(...) 定义中冲突:“错误[E0495]:由于需求冲突,无法推断函数调用中生命周期参数的适当生命周期”。
我应该如何实现这一点?还是我对一生的假设完全错误?谢谢。