HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( Q3 A/ k3 O, o+ u/ G& o# [( u6 G
- R; [; ~, ~% C4 E. f2 w public Object buildActions () {
# r/ M+ `2 |6 W5 S8 s super.buildActions();
+ {( @- x2 Y4 T: b5 j) p1 _ + V& G9 V- w* y; T5 i/ w+ y& H; u
// Create the list of simulation actions. We put these in& `& ]! w5 J/ m0 a
// an action group, because we want these actions to be' G7 R3 t( Y. F7 g
// executed in a specific order, but these steps should
9 c1 v d. l/ @9 Z0 t // take no (simulated) time. The M(foo) means "The message
* x, u$ ^* y: _( ~) ? // called <foo>". You can send a message To a particular
0 E, \( H9 a! H9 O' p // object, or ForEach object in a collection.+ t2 o y( t# W; h: N; G
; a+ [% B9 @) R9 e6 H. j9 _. `$ _ // Note we update the heatspace in two phases: first run
0 g' q* C2 }4 x. q+ E i9 d // diffusion, then run "updateWorld" to actually enact the! j) s$ F# \* V; a
// changes the heatbugs have made. The ordering here is- O; Z8 k+ B& C* u. \( q9 E
// significant!
5 P+ R, U( ~8 n" o. V" k. I3 L' y - t: U. p M( p! \# Q# F/ M
// Note also, that with the additional1 {/ N8 S) q) N5 ?& P
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 `/ W* S' H. `- ~- o7 p, L, `
// randomize the order in which the bugs actually run
( Y( N3 g+ p0 ?' F // their step rule. This has the effect of removing any
2 Z/ B( {: o' T) J3 b1 Z // systematic bias in the iteration throught the heatbug
7 S) \- J z/ R. | `. {; \ // list from timestep to timestep2 ?; n6 S4 l+ }+ E
' e0 c$ b& C* m1 z% m // By default, all `createActionForEach' modelActions have
) H- t$ C9 f7 T- n // a default order of `Sequential', which means that the
# l9 C7 b7 _" t* c/ t; n, R# d O // order of iteration through the `heatbugList' will be/ h9 u9 |% Z2 o% f4 N
// identical (assuming the list order is not changed" Y0 L* w4 z# r6 D
// indirectly by some other process).! D% x: g' W% P( ?5 U
6 v" D: W5 U3 t modelActions = new ActionGroupImpl (getZone ());
$ r# w u) w; ^& E
+ k) ]8 W# f5 ]. |: X try {
* a% f% h" w O7 D' z4 O modelActions.createActionTo$message! o' V$ H% [" K$ Q7 _5 |# ]
(heat, new Selector (heat.getClass (), "stepRule", false));
7 s n# @# R. b% S3 P9 z: k: u } catch (Exception e) {/ u1 m4 p6 \7 O" o$ ?
System.err.println ("Exception stepRule: " + e.getMessage ());
+ N& F5 s) o2 a, p& b5 j* y }% R& ?9 x( H& x/ W* V9 r) _
/ ~+ i4 Q6 w5 m) T: }: ^
try {
& I& T6 _0 j3 `* ]" b$ I Heatbug proto = (Heatbug) heatbugList.get (0);
' V7 i# f, ~' N$ E" d; c2 u( G Selector sel =
/ o i& t; k$ i/ f3 ~+ V& T new Selector (proto.getClass (), "heatbugStep", false);
$ ?) B% M& A; k( M2 F; \5 L" z actionForEach =
5 K0 c. _" F T4 y modelActions.createFActionForEachHomogeneous$call
& t5 P7 V/ w5 E' z5 ]" D6 u& \0 y (heatbugList,
" q* B9 Y+ i7 r3 D! t9 h6 h new FCallImpl (this, proto, sel,& S/ H9 K3 O. F; f+ k0 A( o
new FArgumentsImpl (this, sel)));
5 j. g! j6 O* U- ?2 o9 J' v2 @/ w } catch (Exception e) {! t i1 i9 r1 c! \% r, F, I
e.printStackTrace (System.err);
9 C( { M# Z# {% Q7 D# h }
$ @/ r1 E* i4 m" { L. h 3 ~5 _4 y8 @% s/ B9 Q) X. w4 U
syncUpdateOrder ();
6 N. U3 t1 f4 Q3 d
5 u9 Z; J2 d5 F/ m9 J! d try {
9 x; T5 @' }) }- O& V5 O modelActions.createActionTo$message # L, e% Q$ p" u- P9 }# W
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 t: ^& Y; S& f8 s! C } catch (Exception e) {
2 N9 V4 s- \' h1 C$ i& ^ System.err.println("Exception updateLattice: " + e.getMessage ());
3 ~( w6 o- G) |4 n. _3 ]. x) P/ }2 X }* m0 Y# D! q5 Z r
# p/ @5 C! l5 x& ~ // Then we create a schedule that executes the) g9 d" t! U0 u5 f5 E
// modelActions. modelActions is an ActionGroup, by itself it
) V. z" S9 w2 A5 f // has no notion of time. In order to have it executed in5 y, r! E4 a: v, U! y8 [
// time, we create a Schedule that says to use the% e& X- @; h* m% j
// modelActions ActionGroup at particular times. This5 L1 G' c0 [3 v1 `" ^0 I
// schedule has a repeat interval of 1, it will loop every
( |' N3 y, ~# c // time step. The action is executed at time 0 relative to
# g8 F# e2 P# p' Y, h3 ]* F7 I // the beginning of the loop.# b9 o# O& ~/ J1 D9 ~
9 g0 {( C9 r5 M/ y3 D
// This is a simple schedule, with only one action that is
% E* J Q9 r+ Q4 Y: E- K. P0 K // just repeated every time. See jmousetrap for more+ ^7 c0 P+ b" o% b
// complicated schedules.& X2 V$ ?7 y3 a S9 e, z
; a V: W$ ]% }3 B2 Y% s( w7 d
modelSchedule = new ScheduleImpl (getZone (), 1);9 D. r/ P( g1 F8 _
modelSchedule.at$createAction (0, modelActions);
4 {) h/ m7 M9 W+ J. F
$ ]. C& c- _* [( V return this;
1 V- Z+ X2 b0 m9 `* [ } |