我知道可變字段在0.6中被刪除。我收到以下錯誤代碼,可變結構字段
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或lazy eval來打結。 – MFlamer
@MFlamer,通過[期貨](http://static.rust-lang.org/doc/0.6/std/future.html)有懶惰的評估,但這是一個非常重的解決方案。 – huon