HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" U; s' |3 f$ j
S Z$ V) J- T public Object buildActions () {8 X( u2 l* L0 j/ J
super.buildActions();' \1 V8 X4 b; x
6 H& ?* H6 h# e: J3 |+ M8 a // Create the list of simulation actions. We put these in$ c0 n6 v: }- T! ?4 C4 k
// an action group, because we want these actions to be
% U/ K2 b2 x' G% j4 @ // executed in a specific order, but these steps should
4 p; ^: a: ~9 L // take no (simulated) time. The M(foo) means "The message. S3 f0 p F2 S
// called <foo>". You can send a message To a particular
' d2 m4 j2 B5 i- p/ G // object, or ForEach object in a collection.8 A+ C% d3 C N; S- m
; u ?+ Q1 E% _# i8 ~ // Note we update the heatspace in two phases: first run
) R$ Y x$ K+ \* u+ Y, V9 o // diffusion, then run "updateWorld" to actually enact the$ P$ y8 G% D3 C/ Q" Z
// changes the heatbugs have made. The ordering here is7 ^! h$ j+ ^9 \ u7 B: `* S- t; ~
// significant!
) c b$ A) Z4 L2 z- y4 [( ?
+ s6 G8 ~9 j2 g0 C // Note also, that with the additional9 L1 @& S; d) C3 l N5 F! `9 d1 e5 v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# B- B9 H4 h! D9 _: `! L" X // randomize the order in which the bugs actually run
( L, [) d; [0 |7 { // their step rule. This has the effect of removing any
) o& B Y8 K+ W) c$ `: [* @( F // systematic bias in the iteration throught the heatbug
0 P4 y g5 H: `6 J // list from timestep to timestep
9 o& a9 x5 c/ L* P" z$ N% K6 B
6 j; F9 Q: B# a // By default, all `createActionForEach' modelActions have
& n5 J2 F- L6 V( a, V8 w% C // a default order of `Sequential', which means that the3 _* s- x' d% ~2 m% D% y
// order of iteration through the `heatbugList' will be+ ?/ F; i& z* i8 q( h7 M/ z, B4 ?
// identical (assuming the list order is not changed
$ I9 s( y/ K$ A // indirectly by some other process).
. G9 t. S$ |7 Q8 b/ p& Z
' B! |. @ @) Q8 W# d7 ]+ A modelActions = new ActionGroupImpl (getZone ());4 l* ~! t9 l# i$ Z% v4 M
; l5 y1 L. H0 H% z6 ~
try {3 T o- u6 [) ?$ Z
modelActions.createActionTo$message& O9 c1 Y/ L% \1 P Q& i7 u- y" A2 E
(heat, new Selector (heat.getClass (), "stepRule", false));
/ E0 v4 U* G' u } catch (Exception e) {
8 _. o# f& l8 j System.err.println ("Exception stepRule: " + e.getMessage ());3 c u" I$ i# O- I( y
}
5 k) |2 y0 W: u+ m5 s4 p! s8 z5 U" M
try {. q8 R4 O5 y$ w" C8 O
Heatbug proto = (Heatbug) heatbugList.get (0);
& B& _6 T- I: H: g! R6 l Selector sel = ! S8 {3 X' [: o( x
new Selector (proto.getClass (), "heatbugStep", false);; _# `: e& |0 N+ K; k: r" x; @
actionForEach =. i; U( q6 z! Q4 f3 ? k
modelActions.createFActionForEachHomogeneous$call! g$ x( z& X! ?$ d( D) f% J, B$ v
(heatbugList,
" W8 p z( P/ p new FCallImpl (this, proto, sel,- ]7 D6 f1 C/ ?3 ^3 E% ^5 F b
new FArgumentsImpl (this, sel)));
' r2 |6 K. y% C+ d9 C; L' V } catch (Exception e) {
9 q2 h$ j/ t3 g9 i9 p& t e.printStackTrace (System.err);9 d8 I: ]' c/ C0 I0 p# W5 }; q n
}
# d% W% J5 L% B% E% p0 [( B 8 I* f/ H X2 ~- E* D+ ]
syncUpdateOrder ();3 W4 d: b& Y5 e) p" z T" u
1 y; u2 Q- ^2 H: d2 L0 v* r' D try {
+ W+ C! l' M$ S% H modelActions.createActionTo$message
4 r. e" l/ l" K (heat, new Selector (heat.getClass (), "updateLattice", false));
/ _4 E9 U5 d0 u+ m& \3 D6 R } catch (Exception e) {9 r- g. l( k6 }7 K( o' a
System.err.println("Exception updateLattice: " + e.getMessage ());; j7 V: u# l- m' Y
} g; F* s2 w! ~( y( B
5 e& {2 C4 G* b9 ]+ M // Then we create a schedule that executes the8 o; W6 I& B, }* v% I
// modelActions. modelActions is an ActionGroup, by itself it
' H; \% `6 s7 [; P! B // has no notion of time. In order to have it executed in9 A( L4 r& N6 F1 [! n1 K
// time, we create a Schedule that says to use the
0 Q( v% \, L) q3 X* i // modelActions ActionGroup at particular times. This% W$ o2 h' V4 g
// schedule has a repeat interval of 1, it will loop every
" E9 q7 d5 X& ^$ _+ j* l // time step. The action is executed at time 0 relative to- D/ J6 D0 X, f- _
// the beginning of the loop.
- o* D6 Y' m" t" Z& n9 [1 a }4 `
0 S: w/ t/ L6 W6 E5 V // This is a simple schedule, with only one action that is# \3 y" L R1 f
// just repeated every time. See jmousetrap for more. k5 k3 Q! i" s/ U [' I8 ?
// complicated schedules.0 C8 i9 d9 W/ L# L
& b* `1 g$ d/ V" d
modelSchedule = new ScheduleImpl (getZone (), 1);5 r, E; S2 R. F+ b* u
modelSchedule.at$createAction (0, modelActions);
5 d+ i+ e* V3 c0 k0 I4 I" w( W 4 T2 f# a9 F3 z7 c% _' {; R3 V
return this;
2 n' _& V- I; i8 \ } |