HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 X7 A: y& P4 z$ H4 O
# m, K3 C/ b m) G; ]) q# C* K public Object buildActions () {
9 n% i2 W2 K4 g3 c5 J super.buildActions();
* b7 O7 ?7 N8 T8 ~! O* \2 O
, K% V) X! H* h x+ b4 g" R // Create the list of simulation actions. We put these in' X1 O# p9 j5 c
// an action group, because we want these actions to be
. t' S/ v9 J$ X6 l" k4 H5 x# [& w // executed in a specific order, but these steps should5 j& m. V; p- j" L: |# M
// take no (simulated) time. The M(foo) means "The message6 @2 i, Q; q5 E3 B! s7 B) v
// called <foo>". You can send a message To a particular
- p |1 g* s- G; Q0 y // object, or ForEach object in a collection.# c. C# I% v! e
9 r/ w' S8 Y/ n3 Q% b // Note we update the heatspace in two phases: first run E; e" t, `5 D. W
// diffusion, then run "updateWorld" to actually enact the
- o0 e, E4 T6 M+ v // changes the heatbugs have made. The ordering here is" i6 T1 P% L0 s4 e& Z
// significant!2 z3 P. ^- E- V
3 x$ X: C' y2 ?$ R7 v' L) t1 x
// Note also, that with the additional
( i3 Z) u1 r; `- ]: N; i" m // `randomizeHeatbugUpdateOrder' Boolean flag we can) b4 V8 r. @, e c
// randomize the order in which the bugs actually run/ @, Y- F. U9 U: N3 N
// their step rule. This has the effect of removing any9 d4 q0 T# ?) d& n, Q8 E+ _
// systematic bias in the iteration throught the heatbug6 y8 k9 |5 [. s& x
// list from timestep to timestep( N0 |, F' Y0 v
0 t- k3 A# N) ?. Q // By default, all `createActionForEach' modelActions have
( i9 m7 O3 ], m% c // a default order of `Sequential', which means that the
^2 p" j( {, N" ?* |- A1 B // order of iteration through the `heatbugList' will be) i3 k% s1 Z" _4 ?; V
// identical (assuming the list order is not changed
4 ~0 h) a8 \# \0 K2 `* R J // indirectly by some other process).( q7 f$ u: O0 N
* Y: v) o, H5 A1 J' R& S modelActions = new ActionGroupImpl (getZone ());5 m7 m' c. k7 Z- h' m0 f [/ q
( Q+ n" z" J2 Y) f3 m% f0 \2 h- ^
try {
( O5 u/ Z1 E% o* K& v X modelActions.createActionTo$message1 n: Q$ j4 d; k+ `
(heat, new Selector (heat.getClass (), "stepRule", false));) b: S0 b8 [( v1 G& `
} catch (Exception e) {
5 I8 f# H* s# M% K7 K% h System.err.println ("Exception stepRule: " + e.getMessage ());
; v$ D1 I K7 l- C }
5 N) E2 _1 d. R' J: g" U! b0 X( z0 q. j7 I( p$ t9 i
try {
+ g9 W% S9 I0 ^% E( w Heatbug proto = (Heatbug) heatbugList.get (0);
, t' O+ q+ I3 o3 q( p6 J Selector sel =
7 \' O [' Z4 H/ i4 D4 s2 B new Selector (proto.getClass (), "heatbugStep", false);; ^5 l; w' L+ c9 l
actionForEach =
" S8 W& M& c7 J modelActions.createFActionForEachHomogeneous$call
( G4 K* p& e8 G3 ] (heatbugList,9 C' W' _0 P6 R5 |+ o5 v% Q/ T
new FCallImpl (this, proto, sel,, }3 N. I+ H; w; r
new FArgumentsImpl (this, sel)));
2 U% j2 {' @3 ]" R, }) { } catch (Exception e) {
# g4 N! g! S+ l9 A4 V* i% M- @ e.printStackTrace (System.err);
2 D* k& b9 G9 @ r8 |( r/ ] }+ `; I- l2 Q& g P% ]" Z: e
- J$ M' L K+ P syncUpdateOrder ();. L) i( E1 Y8 D, F3 i+ D
6 V# H8 G) A/ B) m9 K try {! j$ U P; v: v6 U$ x% e0 q
modelActions.createActionTo$message
) f. \, O, ^6 t+ y+ E (heat, new Selector (heat.getClass (), "updateLattice", false));
* m5 I, r& p+ `/ L0 a } catch (Exception e) {
5 m1 Z% Z) n o: y System.err.println("Exception updateLattice: " + e.getMessage ());- ^5 v0 q$ Z7 } H9 Q* l3 |
}
4 G5 q3 L" K! Z' N- N
, | l8 o/ n" H. Y // Then we create a schedule that executes the7 [3 ?1 W A) e5 E: ~# k H( V8 T4 o' W1 w
// modelActions. modelActions is an ActionGroup, by itself it) z1 J, O$ v' a8 |% u$ j4 C
// has no notion of time. In order to have it executed in' J8 N( H8 H7 ?4 h D! ?7 i! O
// time, we create a Schedule that says to use the6 K0 E; q3 ]/ K; O8 ?4 P
// modelActions ActionGroup at particular times. This- x2 F2 k* C; k8 X2 Q' \
// schedule has a repeat interval of 1, it will loop every
/ x, Q6 f% j/ d! e* Y3 z // time step. The action is executed at time 0 relative to. z, U: f: N8 y5 L2 D
// the beginning of the loop.: e2 Y8 q% W7 l& T( d
3 }" i4 q7 f" M% w A% x
// This is a simple schedule, with only one action that is
, i6 O/ R; W, o% | // just repeated every time. See jmousetrap for more; t7 M4 r) \; K7 [) M1 x5 Q
// complicated schedules.
; m9 T$ j* ?: H9 j " T3 c! y; Z1 j/ [7 l2 P
modelSchedule = new ScheduleImpl (getZone (), 1);
( H# \8 h7 ?0 Y* \: w7 M modelSchedule.at$createAction (0, modelActions);( d/ y% C1 \2 f0 K
' T0 |! A0 j4 d% V1 M: \
return this;
( C7 I& h! J a% g7 E# L2 \, J& d- ] } |