HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 q! h' s& w, r3 J0 s) V* K; a+ p8 V+ q1 h* {* E
public Object buildActions () {1 Z1 \" e ?2 ^* x% Q
super.buildActions();2 |0 w. T5 A) a/ g% \. ], \
# Y$ L! @: a } // Create the list of simulation actions. We put these in V! G5 s9 z& I8 [& R3 Q: {$ w& s* _
// an action group, because we want these actions to be' |) [5 L9 k# }% ]& `0 d- E
// executed in a specific order, but these steps should
; q9 O" S" Z2 j W1 A" ~& r; ^3 y // take no (simulated) time. The M(foo) means "The message4 I" K5 A" F5 n: K! u$ f7 x+ n# _% A
// called <foo>". You can send a message To a particular
' q* L: o4 L& v" s+ S2 [ // object, or ForEach object in a collection.
$ A, E1 o3 Z; L* v 7 O2 _# b+ ^" P: b
// Note we update the heatspace in two phases: first run3 _5 R' }: K0 i' _% R
// diffusion, then run "updateWorld" to actually enact the* P* [; C0 m4 G. P
// changes the heatbugs have made. The ordering here is
) g8 v: s' L3 }. s2 j1 x // significant!
( Y- x. h& G% v9 L0 e: l
- \. T( R, n, X3 C. m/ m. |: S // Note also, that with the additional: Q& l3 `# {: m6 n5 `; N* N
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- k h; N1 C, G1 [/ U // randomize the order in which the bugs actually run
* O5 Z+ ]4 u- G7 j3 p2 | // their step rule. This has the effect of removing any/ H- x1 R7 P* U/ c' Z' p0 e
// systematic bias in the iteration throught the heatbug
( B# |* x. W% I. V // list from timestep to timestep
2 b- Q8 m+ J0 ]5 H1 m
2 x/ f; }# w( y* a/ g; V4 x // By default, all `createActionForEach' modelActions have
4 _# Y* G# t$ L% S // a default order of `Sequential', which means that the
' `% L9 Q3 z' T) W/ Y // order of iteration through the `heatbugList' will be4 a# q- a6 }# _6 u* O% x
// identical (assuming the list order is not changed
* A3 |8 T7 z4 H8 R // indirectly by some other process).
5 k' h/ S# i- _; { & [5 t: d; M& b7 v4 T
modelActions = new ActionGroupImpl (getZone ());
! C, T& x! p Y: O7 L2 c. Q" S* H e8 F/ Q3 k B& j
try {
' ]: |' O& j6 d modelActions.createActionTo$message
1 K X! J X4 k7 |. ]" g (heat, new Selector (heat.getClass (), "stepRule", false));
* r3 z7 k6 r! U' M# u; ~ } catch (Exception e) {, G, t! f& f2 @+ h
System.err.println ("Exception stepRule: " + e.getMessage ());
1 i% d% o+ k' ]/ J }: ~1 r# B: I# q
@2 @. w$ v; |! u/ s+ M6 U try {- R D; ]2 ~/ k* ~# X
Heatbug proto = (Heatbug) heatbugList.get (0);
1 V* B7 V8 q- V( ~( U i) G1 t& a Selector sel = & W3 v1 @- L3 r3 I' e
new Selector (proto.getClass (), "heatbugStep", false);8 ~8 f6 \6 Y1 g f( \% j; ?
actionForEach =% g/ V( ~$ e i: Q0 _% I
modelActions.createFActionForEachHomogeneous$call
2 U3 @# k! a+ z* k, Q: l# q2 ~ (heatbugList,
, G8 R$ c y* ~5 L. v$ \' P) \( K new FCallImpl (this, proto, sel,$ ~% e3 z4 s! ^/ C
new FArgumentsImpl (this, sel)));" R9 \3 C# |7 i# n- ?
} catch (Exception e) {
: V0 w F4 g+ f( ?2 {8 o, C6 \* r- i e.printStackTrace (System.err);1 S( a/ d6 \2 q; Q+ e
}4 F' O y! i& v8 c" |4 G1 @2 x
1 A1 X( v# y& ^" I8 Y syncUpdateOrder ();
3 g8 l! U1 W$ x' |* U& F6 D* h! H: w
try {# Z3 o/ S% Q7 e, `* V
modelActions.createActionTo$message 5 {) d! v4 D5 w% R0 n! U
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 y# A2 O9 g1 e0 ^4 p } catch (Exception e) {
' h! h% }" L, r" ?1 |. x6 i: r System.err.println("Exception updateLattice: " + e.getMessage ());
3 X w0 P9 ~7 A! G- ? }
" R+ K9 m! i: r/ `+ W# B 5 w" s9 R |2 n: z& F! ]
// Then we create a schedule that executes the; g9 s1 p* u) o- g: r
// modelActions. modelActions is an ActionGroup, by itself it
- R2 W7 H: [1 |1 x. T# d // has no notion of time. In order to have it executed in
9 a% z& }% B- @2 \ // time, we create a Schedule that says to use the
+ Y, M$ U% q! B. B L // modelActions ActionGroup at particular times. This) V/ b6 s% ]. G/ U
// schedule has a repeat interval of 1, it will loop every) T9 ]+ _* i0 L
// time step. The action is executed at time 0 relative to$ _. ~6 M1 ?& o- X5 x
// the beginning of the loop.) L' C% U2 i, M
; y8 v4 K& [- b* P8 d+ N // This is a simple schedule, with only one action that is! ^" m) M& X" \/ | X
// just repeated every time. See jmousetrap for more/ W- }- K3 A/ ~0 ]3 x4 o5 O
// complicated schedules.6 B6 F& V5 K, x+ M) L
5 O3 F" _5 B7 ^) s+ |
modelSchedule = new ScheduleImpl (getZone (), 1);
' f$ Q8 A4 r; b* g2 y9 ~/ q1 M modelSchedule.at$createAction (0, modelActions);/ N8 A( f; W3 e1 r
, m& A6 F* k. A$ R: V return this;
; [) P9 V+ h$ u; p } |