Я борюсь с заемщиком - удивляюсь.Каковы варианты прекращения изменчивого заимствования в Rust?
Хотя я нашел решение, добавив закрытие, мне любопытно, есть ли другие способы прекратить изменчивый заимствование, чтобы следующий оператор мог получить доступ к привязке впоследствии.
Вот что я сделал до сих пор:
let mut canvas: Canvas = Canvas {
width: 5,
height: 5,
array: vec!['x'; 5*5],
};
{
let mut renderer: CanvasRenderer = CanvasRenderer::new(&mut canvas);
renderer.render_point('x', 3, 3);
}
println!("The Value in the array is: {}", canvas.array[9]);
Я обернуть закрытия вокруг связывания CanvasRenderer
объекта и после того, как мутирует холст и область заканчивается, CanvasRenderer
Штампы и мой изменчивый заимствован canvas
доступна читать или что угодно.
Это работает, но теперь я хотел бы увидеть другие решения!
Я слышал о drop(stuff)
, но это не сработало, как я и думал.
Помимо этого: '{...}' is * not * закрытие; это всего лишь блок. –
Я знаю, что закрытие доступно для доступа к следующим связям более высоких областей (например, холст). Пожалуйста, перенаправляйте меня, если я мертв неправильно! – xetra11
@ xetra11 nope, замыкание - это особый вид функции, который может «закрывать» (т. Е. Захватывать, использовать) переменные из охватывающей области (отсюда и название). Вы можете найти больше о них [здесь] (http://doc.rust-lang.org/book/closures.html). То, что вы используете здесь, называется блоками - просто группами операторов. –