我正在尝试在图形上实现深度优先搜索。
# This will restart the computer. Then delay 2 seconds.
# Then wait for PowerShell to become available again.
# It will also timeout after 300 seconds (5 mins).
Restart-Computer -Wait -For PowerShell -Timeout 300 -Delay 2
逻辑是拥有一个指向当前节点的指针,然后对其进行扩展,将其指针更新为该扩展节点的左子节点,然后在该指针下的节点满足某些条件时继续操作。但是,我无法使用借用的引用逻辑正确执行此操作。我目前的最佳尝试是:
PS C:\>Restart-Computer -ComputerName "Server01" -Wait -For PowerShell -Timeout 300 -Delay 2
This command restarts the Server01 remote computer and then waits up to 5 minutes (300 seconds)
for Windows PowerShell to be available on the restarted computer before it continues.
产生的错误:
#[derive(Debug)]
struct Interval {
low: f64,
high: f64,
size: f64,
left: Option<Box<Interval>>,
right: Option<Box<Interval>>,
}
impl Interval {
pub fn new(low: f64, high: f64) -> Self {
Interval {
low,
high,
left: None,
right: None,
size: high - low,
}
}
pub fn expand(&mut self) {
self.left = Option::Some(Box::new(Interval::new(self.low, self.low + self.size / 2.)));
self.right = Option::Some(Box::new(Interval::new(
self.low + self.size / 2.,
self.high,
)));
}
}
如何更改我要引用的对象,同时仍然能够评估该对象上的表达式并访问其字段?
答案 0 :(得分:1)
对main的以下更改应该起作用:
fn main() {
let mut current_node: &mut Interval = &mut Interval::new(1., 2.);
while current_node.left.as_ref().expect("PANIC").size > 0.01 {
current_node.expand();
current_node = current_node.left.as_mut().expect("PANIC");
}
println!("Deep down: {:?}", current_node);
}
expect
按值取舍,因此它尝试消耗current_node.left
,供以后使用,Option::as_ref()
返回引用原始值的新Option
Option
,然后可以在不破坏原始值的情况下使用它。除可变性差异外,相同的逻辑适用于将as_mut
添加到第二个调用。