0
我試圖捆綁狀態的結構與變異狀態回調在一起。獨特的指針狀態+回調拉斯特
struct StateAndCallbacks01 {
state: @mut int,
inc: @fn(),
dec: @fn()
}
let state01: @mut int = @mut 0;
let inc01: @fn() = || {
*state01 += 1;
};
let dec01: @fn() = || {
*state01 -= 1;
};
let state_cbs_01 = @StateAndCallbacks01 {
state: state01,
inc: inc01,
dec: dec01
};
(state_cbs_01.inc)();
println(fmt!("state: %d", *state_cbs_01.state));
(state_cbs_01.dec)();
println(fmt!("state: %d", *state_cbs_01.state));
接下來,我想這種結構發送到另一個工作,因而不得不到處切換到獨特的指針:當我使用管理指針,它工作正常。我無法使這項工作:「錯誤:過時的語法:const或可變擁有指針」
struct StateAndCallbacks02 {
state: ~mut int,
inc: ~fn(),
dec: ~fn()
}
let state02: ~mut int = ~mut 0;
let inc02: ~fn() = || {
*state02 += 1;
};
let dec02: ~fn() = || {
*state02 -= 1;
};
let state_cbs_02 = ~StateAndCallbacks02 {
state: state02,
inc: inc02,
dec: dec02
};
let (port, chan): (Port<bool>, Chan<bool>) = stream();
do spawn {
(state_cbs_02.inc)();
println(fmt!("state: %d", *state_cbs_02.state));
(state_cbs_02.dec)();
println(fmt!("state: %d", *state_cbs_02.state));
chan.send(true);
};
let result = port.recv();
println(fmt!("result: %s", result));
有什麼建議?任何更好的方法來跨任務發送回調?
平原'impl'解決方案僅如果只能「inc」和「dec」的一個可能值;如果這些功能依賴於數據,即使用特性或只使用在結構的國有關閉(沒有'〜mut'的'mut')改變會更好。 – huon
我忽略提及,但我真的需要inc/dec的多個實現。這是我與XML SAX事件處理有問題的簡化版本,而不是增/減我會START_ELEMENT/END_ELEMENT /文本。試圖做一些類似的東西添加。 設狀態=〜國家{...,得到一個「錯誤:移出捕獲外層變量的堆封閉」。做你確實做了什麼工作。我真的不明白爲什麼一個擁有的指針不能傳遞給任務,但是棧引用起作用。 –