Ну, дословный ответ был бы:
struct Car {
name: &'static str, // '
wheels: [Wheel; 4],
}
struct Wheel {
size: i32,
owner: *mut Car,
}
Но это не очень полезным, поскольку owner
не могут быть использованы за пределами unsafe
кода, так как это голый указатель. Это, однако, приводит к ограничению ржавчины в том, что на практике невозможно иметь циклические заимствованные ссылки; то есть вы не можете использовать &Car
для owner
.
Который задает вопрос: что это такое, что вы действительно хотите выразить, здесь? Действительно ли Wheel
действительно необходимо знать о Car
к нему прилагается? Если нет, вы можете просто отказаться от owner
, и все будет хорошо.
Если да, можете ли вы жить с unsafe
блоками, наносимыми на ваш код (в стороне: это, как правило, будет вашим последним средством)? Если нет, вам нужно понятие об общей собственности. В этом случае требуется ли доступ к этой структуре только для чтения? Если это так, возможно, вы хотите Rc<Car>
. Если нет, вам может понадобиться Rc<Cell<Car>>
... если вы не работаете в потоковой среде, и в этом случае вам понадобится Arc<Mutex<Car>>
... может быть.
Я полагаю, что я получаю: есть очевидный, прямой эквивалент, но если вы на самом деле пытаетесь перенести семантику ... вам нужно будет более конкретно о том, что вы 'пытаюсь сделать, а не как вы пытаетесь это сделать.
Все это хорошая информация. В общем, в Rust и C я бы не писал такой код, хотя иногда это случается. Мне было просто интересно, как выражать отношения Владелец/Собственник в тех случаях, когда Владелец (колесо) должен знать об Владельце. –
@njpaul Возможно, вы захотите ознакомиться с документами '' std :: rc' (http://doc.rust-lang.org/std/rc/index.html). У них есть хороший пример отношений между владельцем и владельцем. – Shepmaster