HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* W7 L% u( z% x& F9 i) l. a v1 T6 z
public Object buildActions () {* t6 v' j: ~2 O8 e& y- b4 f
super.buildActions();8 r7 J! E! W3 Y0 N/ e, D
. P+ X* J4 A1 w3 R% I: g8 y // Create the list of simulation actions. We put these in
2 Q3 A- p+ B Q& H7 t, p // an action group, because we want these actions to be5 T- ?0 N7 Q7 N. ]
// executed in a specific order, but these steps should
3 H( m) b R, h7 [ // take no (simulated) time. The M(foo) means "The message, q% E7 ^0 C( k ^6 F
// called <foo>". You can send a message To a particular4 O$ q3 R9 P" m2 }# x: s
// object, or ForEach object in a collection.$ J0 k+ J6 S+ {* a
: M% i) X1 _/ ]; O // Note we update the heatspace in two phases: first run. ~4 x% B7 g1 Q3 b# n3 ^2 t' [7 N: k
// diffusion, then run "updateWorld" to actually enact the
# u" _" d% R0 C4 k0 @ // changes the heatbugs have made. The ordering here is) j, A8 @( A' ], i/ ]9 \" Q, w; e
// significant!9 F! \" c7 R0 I3 U) X- W5 |
5 i- p, \/ ?3 E U // Note also, that with the additional b' U" X/ T1 ]+ [6 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 f$ P% |8 R# y" z8 \+ v6 H // randomize the order in which the bugs actually run
8 y W$ X% G" g/ D! d- d // their step rule. This has the effect of removing any
) @" C3 {1 _ D8 k8 H8 k. W // systematic bias in the iteration throught the heatbug5 l' C! `' x4 M& k, @0 s* a
// list from timestep to timestep
9 @( y/ i3 m: z7 Q+ h
" }) e2 `& j1 q5 U' T- d# T // By default, all `createActionForEach' modelActions have, }, T+ x& m9 c
// a default order of `Sequential', which means that the2 g& T+ l5 x8 r+ U$ y
// order of iteration through the `heatbugList' will be9 ]% i) {' K' V. e
// identical (assuming the list order is not changed0 a1 ]3 p" ~* R/ z
// indirectly by some other process).
. h0 o; i/ O$ Z. R! n ( u0 Q) A: g$ Y! u% j+ L* {8 I6 {
modelActions = new ActionGroupImpl (getZone ());2 J# R/ @/ ^4 O
" t3 N, z/ u! r, \" b try {$ B3 m& Q$ @% Z0 C
modelActions.createActionTo$message+ F! o5 A& F$ x# l5 |
(heat, new Selector (heat.getClass (), "stepRule", false));
5 E( j9 c" u' L# {! m } catch (Exception e) {) p4 w: V3 b+ B% W) F8 a) l8 @) J
System.err.println ("Exception stepRule: " + e.getMessage ());
" [ q- T+ c) L+ U; [& V }
+ |5 w B8 F5 u* [
# m% m9 J# U9 \) U2 w. \ try {: m7 T+ T% \/ g. z# t3 Z0 ^* F
Heatbug proto = (Heatbug) heatbugList.get (0); ^/ [. T4 _& `9 }0 h$ v
Selector sel = 7 X7 ]4 L v2 v; `& R
new Selector (proto.getClass (), "heatbugStep", false);
1 {! G1 i+ \" n2 y K actionForEach =5 K% K5 I# k" H+ [' e
modelActions.createFActionForEachHomogeneous$call( M) w: I- R0 o# v" G6 C
(heatbugList,
3 B+ _+ A/ T6 V; m1 a' O5 w new FCallImpl (this, proto, sel,( a9 E* E0 P9 e+ D$ m9 B, a# w0 ]. k
new FArgumentsImpl (this, sel)));! w" J$ ~" P6 A# i
} catch (Exception e) {2 r" p4 j8 m& |9 t3 q3 _6 _
e.printStackTrace (System.err);% j7 R# U# v" a1 M* A* o$ j4 a
}
& B0 \' P. m8 I: z3 ` / C( {5 y2 Q' p: _ V- ]
syncUpdateOrder ();
: }& j, y1 {, s
4 E5 o- t- Y9 f0 F try {
1 K8 M' x2 Z% E! j& B! v- ^ modelActions.createActionTo$message
% I, Q1 d J6 W$ `( x W (heat, new Selector (heat.getClass (), "updateLattice", false));. u4 w0 a5 Q4 K* k8 X
} catch (Exception e) {- C9 z+ a J5 {# {5 ]
System.err.println("Exception updateLattice: " + e.getMessage ());7 z8 C- V3 I! E8 f+ n1 H. S
}
4 i5 N3 C1 _9 e( j/ L0 I$ v. z ; i1 C `' l, r( }* U
// Then we create a schedule that executes the+ d! L) _: l- z+ o5 e3 h
// modelActions. modelActions is an ActionGroup, by itself it( g8 P2 \ v8 w5 \8 d
// has no notion of time. In order to have it executed in+ x- Z7 i8 T8 N& E
// time, we create a Schedule that says to use the s& b, f. R# }# U% h; Z5 L" y& p
// modelActions ActionGroup at particular times. This
& K; \( Y7 D" i4 j // schedule has a repeat interval of 1, it will loop every
. @0 M' w: [% {1 _ // time step. The action is executed at time 0 relative to
( Q5 t/ j) W8 D1 i- B+ x // the beginning of the loop.0 X) a# @$ J8 ~0 ?, T. I, D
; x7 J* @7 s1 y S" W // This is a simple schedule, with only one action that is8 O4 W& @1 w0 Y6 L* V7 m
// just repeated every time. See jmousetrap for more2 Y6 e3 ]" r! p& \5 A0 \! K* P
// complicated schedules.
8 Z% w9 \/ P) P1 P7 l 3 I6 J4 K' s- C3 v
modelSchedule = new ScheduleImpl (getZone (), 1);; P5 j7 h8 @+ u4 k; w. ?, _& j0 O$ n
modelSchedule.at$createAction (0, modelActions);
" v4 E/ z5 k7 T- N6 m/ h
" |& ~2 x! v+ ~ B! y1 [ return this;. u! @; W0 G% X* E2 t( m/ i
} |