HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 |, K* c# V; s* Y% v. q, L2 _8 E
, y3 @1 i$ |/ a4 a4 X public Object buildActions () {
2 o7 [1 H' y) n super.buildActions();
0 E) l+ c R/ g( ]
6 Y$ O; L: E$ x* E // Create the list of simulation actions. We put these in0 o) M" c. X( c
// an action group, because we want these actions to be3 b8 s7 b8 H# d& @) H$ J2 Y
// executed in a specific order, but these steps should2 |/ ~- p1 c2 [" L2 R
// take no (simulated) time. The M(foo) means "The message$ `& h# `$ S& t% c9 A/ J; ?+ H
// called <foo>". You can send a message To a particular! l, [$ D9 W5 u8 Z; n7 M
// object, or ForEach object in a collection.
5 ]) E4 ]* C7 d4 W/ w / D1 [, k9 w- h6 q/ s# u" a
// Note we update the heatspace in two phases: first run1 }3 H% W& ~: P( ] a8 F
// diffusion, then run "updateWorld" to actually enact the/ X) G$ \( Q9 P
// changes the heatbugs have made. The ordering here is! [6 }8 ^. Y; {3 C" b
// significant!
! u/ C8 r) z4 e
- ^& g9 Z/ Y1 n' ?/ r // Note also, that with the additional
4 l+ S* w0 U7 Z. x // `randomizeHeatbugUpdateOrder' Boolean flag we can& h. m' h6 l9 \3 |( V
// randomize the order in which the bugs actually run
9 f$ w+ ] d+ s7 y& S // their step rule. This has the effect of removing any" B$ @ E/ I$ q# n4 V- e4 N
// systematic bias in the iteration throught the heatbug8 |+ a% y- a1 V) \" E% A
// list from timestep to timestep
$ ]) s$ @+ M4 t7 p. d
8 c- S- [$ j. X4 p2 ]. N+ M // By default, all `createActionForEach' modelActions have
* W4 o4 {. C. `- h& ~0 p4 @0 a, M // a default order of `Sequential', which means that the
2 c- n$ q9 A+ K' d // order of iteration through the `heatbugList' will be& M; h& Y0 m) S) y& L9 w- z* P
// identical (assuming the list order is not changed
! ^( ?0 x! R5 T0 V4 y x // indirectly by some other process).
8 P" x6 C5 |" `9 M4 s. g7 J
& `6 z2 I* j8 v" n" F modelActions = new ActionGroupImpl (getZone ());' w3 G( h; X4 l/ W4 P! k
6 l2 q* z8 [$ _/ M try {( x4 Z! t9 @5 l) v$ `0 |4 [0 _# S
modelActions.createActionTo$message
" F: D6 g3 j# ?+ s( ] j2 a (heat, new Selector (heat.getClass (), "stepRule", false));1 B0 j* V5 k7 ?4 l. |$ j
} catch (Exception e) {# p% ~/ l) u3 T" q
System.err.println ("Exception stepRule: " + e.getMessage ());2 k2 F2 P7 j/ _4 j/ [
}
9 K3 z- Q0 D. M; ~/ Q$ s" }* E% r' r1 V, H
try {& S+ A2 @$ u, C2 ]) y z3 T
Heatbug proto = (Heatbug) heatbugList.get (0);4 u, C- k/ `" A& s# z- p: ~7 F
Selector sel = 4 ]) ~: s8 ]/ T+ F# l
new Selector (proto.getClass (), "heatbugStep", false);0 r" y. l9 z& F
actionForEach =/ ?2 f4 E) A/ K& U
modelActions.createFActionForEachHomogeneous$call
3 W8 B# ?1 ~( n: v7 q (heatbugList,
. D: Y" S0 Z; b- }6 I3 ` new FCallImpl (this, proto, sel,# w! p) ^ f9 l
new FArgumentsImpl (this, sel)));" s) S1 ^3 t# N- P/ v6 S% l }, O
} catch (Exception e) {
, l) m1 R+ k; j5 j1 ? e.printStackTrace (System.err);
# W$ m# g9 [# L, P& H }' \8 q5 n2 ]8 i
/ [/ _, N1 U# ~# H x8 y syncUpdateOrder ();
. H/ n( ~4 f! j4 D( a: J+ ?9 _) x x2 p. d9 E- m
try {% u+ O: ]0 H7 S$ n4 J
modelActions.createActionTo$message
7 C! j% Z8 s6 b( j$ S (heat, new Selector (heat.getClass (), "updateLattice", false));
4 c, U1 j: T* D) _; n7 ~ } catch (Exception e) {. e. O7 V+ y! E" X2 z! o* u# `1 u6 b
System.err.println("Exception updateLattice: " + e.getMessage ());0 ]7 G! w4 l3 a5 S
}( C# A: y6 [; I' k+ y
4 b }1 m+ _. n! C% M2 ?0 P // Then we create a schedule that executes the, R! f+ w2 i. N$ L/ z! y
// modelActions. modelActions is an ActionGroup, by itself it$ M8 i4 a- [4 O: ^
// has no notion of time. In order to have it executed in: U N a* A3 o7 ~
// time, we create a Schedule that says to use the% q5 `1 h7 |- h6 `# n7 f
// modelActions ActionGroup at particular times. This
7 b- ~% J; g# ?. ~9 h2 U // schedule has a repeat interval of 1, it will loop every8 R# f0 c# E, i! }% J. H3 K# ]9 M
// time step. The action is executed at time 0 relative to
6 O$ Z5 o8 f: z# Z0 G // the beginning of the loop.
6 s" g0 N5 S: b8 F6 z7 N$ L: }, h* U6 o6 P" Q7 h/ F
// This is a simple schedule, with only one action that is; F1 c* _9 ^0 w0 C
// just repeated every time. See jmousetrap for more
8 ?$ d9 _5 t/ T // complicated schedules.( n* V5 ^* O* { a
) x6 P8 R- ~0 {2 m. o2 L3 l
modelSchedule = new ScheduleImpl (getZone (), 1);# h! o; M w0 z$ N# x( N
modelSchedule.at$createAction (0, modelActions);
_! i- s& O2 i; J7 N ) S/ Z; a' U M- c Q. g% H
return this;( V( S2 D+ X5 o$ D. t; V
} |