HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: w3 [/ \; s8 h( _) w' V- a* S, w9 ?# d2 b
public Object buildActions () { p9 d3 }& T" Z+ P$ z* B4 t
super.buildActions();0 z3 Z; C/ I$ S. I3 \
" l: _% N9 m$ g: O: V1 f7 a) _5 K- L
// Create the list of simulation actions. We put these in4 P; {8 D2 y1 P% u( n6 Q
// an action group, because we want these actions to be, Q3 V+ W' A" @* I
// executed in a specific order, but these steps should
2 j0 P5 e' D Z, L // take no (simulated) time. The M(foo) means "The message+ A7 L/ m5 A* }4 a% E
// called <foo>". You can send a message To a particular
4 ]8 f Z3 Z8 I( m% ^7 I+ ? // object, or ForEach object in a collection.
. a# R) e% n# W1 K- L: B. t( k
$ m t+ _ G3 E6 P // Note we update the heatspace in two phases: first run
( n$ k+ N& S2 w! X // diffusion, then run "updateWorld" to actually enact the
. q8 b: ?' q- r // changes the heatbugs have made. The ordering here is
1 u9 g) j2 L% i. X. N5 @ // significant!
4 X- j2 L* i1 W( Y0 Y0 ~, O
% G' j5 v+ v* F |. i8 l3 p: a // Note also, that with the additional1 h& ^. l* q1 ]" J5 d+ |, ^ |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 s$ j) |1 `+ y( E) u // randomize the order in which the bugs actually run
5 G* x( I/ g3 ~5 _- a0 J) N# m, |3 y3 @ // their step rule. This has the effect of removing any$ e) X9 k5 O* i2 @; a! e: s' |
// systematic bias in the iteration throught the heatbug
/ m& y/ K X3 S. v' W% i // list from timestep to timestep
! G2 m9 M0 J4 {+ H; b; m3 m 2 K* J0 Q, u) D0 X
// By default, all `createActionForEach' modelActions have
! X a5 d- q- t3 j5 u+ R" S8 b // a default order of `Sequential', which means that the
7 m. I* S, r! W- E // order of iteration through the `heatbugList' will be, p# `$ `2 G) r( M( o* H. H5 Q/ B: E
// identical (assuming the list order is not changed
) }5 S5 c7 T( s0 E. e5 v: n9 f // indirectly by some other process).
2 L8 k/ L c+ Z6 g. e& N
! o2 K" b4 ]+ |) j6 l5 ^0 z modelActions = new ActionGroupImpl (getZone ());
6 ?" I5 F! O, }# Y
$ U' K: y: ~9 i$ {( \4 {% a( U try {% N* |, P5 H' _4 _
modelActions.createActionTo$message7 Q! r& ]4 G+ v6 r; i
(heat, new Selector (heat.getClass (), "stepRule", false));% I' s8 a/ h9 f# v# R
} catch (Exception e) {4 g3 y, q0 k2 @: d1 ]" h: f7 F
System.err.println ("Exception stepRule: " + e.getMessage ());
# F- X7 ^# q7 @% U# W+ C5 \ }
* d; D* k' }+ |
. ~2 E) @" y( A+ r G try {
" b0 z' \- @% p2 \" R" X4 o0 o: ? Heatbug proto = (Heatbug) heatbugList.get (0);) k- K) T9 q7 h9 o( s
Selector sel =
9 c7 q* j- U. G" @ L9 Y% o& C new Selector (proto.getClass (), "heatbugStep", false);
w2 M0 G& X |5 F. |6 D6 o actionForEach =
/ o; K3 m) W- ~ modelActions.createFActionForEachHomogeneous$call S& b X+ E' S, ?" n
(heatbugList,4 P/ y5 Y3 u- O7 Z
new FCallImpl (this, proto, sel,
: o7 o! e' a- d new FArgumentsImpl (this, sel)));
! r: X3 F3 C9 j& c b1 i } catch (Exception e) {, q s2 m5 I! x7 f# n& Z1 g
e.printStackTrace (System.err);7 u* `. f' g( D
}/ i6 D: X. B: `3 Q" E" Z' Y3 A
+ |2 V/ C4 H- [" l" n
syncUpdateOrder ();/ D3 [3 ~. ]9 x- z: {! i
! k) k" F2 D Y* M6 s) W# o% Q1 o7 z& k
try {" F( b0 o+ F7 v3 G# G" f' n
modelActions.createActionTo$message
Y, d a, _/ A' V# J% C (heat, new Selector (heat.getClass (), "updateLattice", false));
$ i: b$ y" B2 E5 X } catch (Exception e) {+ H- S2 D+ h! A$ c6 u) e' j* h
System.err.println("Exception updateLattice: " + e.getMessage ());
+ E; _9 @3 F3 L8 D: j( `/ M }
, c; d1 k& P2 O5 S- j/ B
7 v( T: L8 p& m" }. \ // Then we create a schedule that executes the6 u3 j& m% u- ^
// modelActions. modelActions is an ActionGroup, by itself it
. d6 {# B+ o* D // has no notion of time. In order to have it executed in
3 ^3 W C4 W9 Y" k; N // time, we create a Schedule that says to use the$ z8 W! m0 H" Q4 y5 n: i* a# F3 ]7 {
// modelActions ActionGroup at particular times. This
' |0 j) K. ]1 ?7 w$ y- ?/ ]# @/ F // schedule has a repeat interval of 1, it will loop every+ Q' V( k4 {8 U3 F2 z; |
// time step. The action is executed at time 0 relative to3 B8 J& W: h8 `5 @ C! [1 n3 r+ x
// the beginning of the loop.
0 I- s1 B1 q/ A( E0 x& p) e p4 N' K% f1 i1 d+ k) b4 Z
// This is a simple schedule, with only one action that is- x% H: ?$ X2 X5 J0 B) |
// just repeated every time. See jmousetrap for more
# F4 e; D+ M, k // complicated schedules.3 P4 h* ^1 b# s, T
9 F4 I' J& T) A6 K0 S/ G2 i. O modelSchedule = new ScheduleImpl (getZone (), 1);+ `; a6 L5 n+ Q8 U4 s( H( E
modelSchedule.at$createAction (0, modelActions);# U: j* _6 z/ F4 d7 u- I) f5 r' d0 a
; t8 |. h& E4 I6 f, u" k8 L1 ] return this;8 ~3 {* P. ~) X8 ?6 k
} |