状態を変更するコールバックと一緒に構造体に状態をバンドルしようとしています。マネージ ポインターを使用すると正常に動作します。
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));
助言がありますか?タスク間でコールバックを送信するより良い方法はありますか?