Я знаю, что изменчивые поля были удалены в 0.6. Я получаю следующую ошибку с этим кодом:Mutable Struct Fields
C:\Users\mflamer\Dropbox\Rust\Tests\gmap.rs:23:8: 23:18 error: assigning to immutable field C:\Users\mflamer\Dropbox\Rust\Tests\gmap.rs:23 dart.alpha = vec::from_elem(self.n + 1, dart);
Что я здесь делаю неправильно? Благодарю.
pub struct GMap<T> {
priv n: uint,
priv darts: ~[Dart<T>]
}
struct Dart<T> {
alpha: ~[@Dart<T>],
embed: ~[@T],
tagged: bool
}
impl<T> GMap<T> {
pub fn new(dim: uint) -> GMap<T> {
let mut map: GMap<T> = GMap{n: dim, darts: ~[]};
return map
}
pub fn new_dart(&self,) -> @Dart<T> {
let mut dart = @Dart{alpha: ~[], embed: ~[], tagged: false};
dart.alpha = vec::from_elem(self.n + 1, dart);
//dart.embed = vec::from_elem(self.n + 1,);
return dart;
}
pub fn dim(&self) -> uint {
self.n
}
}
//pub fn traverse(&self,[bool,..])
enum Cell {
Null,
Vertex,
Edge,
Face,
Solid
}
fn main() {
let topo: GMap<Cell> = GMap::new(3);
}
Таковы причины Сейчас я изучаю ржавчину вместо использования Haskell. Я обнаружил, что структуры графов никогда не чувствовали себя совершенно правильно и всегда требовали этих трюков. В очередной раз благодарим за помощь. – MFlamer
Я думаю, нам нужно letrec или ленивый eval, чтобы связать узел. – MFlamer
@MFlamer, существует ленивый eval через [futures] (http://static.rust-lang.org/doc/0.6/std/future.html), но это далеко-весомое решение. – huon