Я только что начал с Rust, поэтому некоторые из моих понятий могут быть неправильными. Я бы очень признателен за исправления, если это так.Передача компонента указателя по значению
Я следил за lifetimes guide и пробовал некоторые из примеров. Я немного изменил пример прямоугольника.
Я изменил функцию compute_distance
, чтобы принять Point
по значению в первом параметре. Затем я удалил &
до on_the_stack.origin
по телефону compute_distance
.
Это дает мне следующее сообщение об ошибке:
cannot move out of dereference of
&
-pointer
Если вместо этого я добавить &
до on_the_stack.origin
вызова, а также принять Point
по ссылке в функции compute_distance
, она работает без сучка и задоринки.
Второй способ работы имеет смысл для меня, но почему мой оригинальный подход выдает ошибку?
use std::num::Float;
struct Point {
x : f64,
y : f64
}
struct Size {w: f64, h: f64}
struct Rectangle {origin: Point, size: Size}
#[cfg(not(test))]
fn main() {
let on_the_stack = &Rectangle{origin: Point {x: 1.0, y: 2.0},
size: Size {w: 3.0, h: 4.0}};
let on_the_heap = box Rectangle {origin: Point {x: 5.0, y: 6.0},
size: Size {w: 3.0, h: 4.0}};
println!("Distance: {}", compute_distance(on_the_stack.origin,&on_the_heap.origin));
}
fn compute_distance (p1:Point,p2:&Point) -> f64 {
let x_d = p1.x - p2.x;
let y_d = p1.y - p2.y;
Float::sqrt(x_d * x_d + y_d * y_d)
}
Я вижу, что вы связаны с документами 0.12. Имейте в виду, что Rust быстро меняется при подготовке к 1.0 альфа/бета/релизу.Рекомендуется отслеживать ночные сборки (и документы). – Shepmaster
Ого, ты прав. Ссылка на ночные документы, кажется, совершенно другая. Спасибо за совет! – RohanC