HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: c5 w6 Z8 l% Q) Y0 E+ S2 |2 ^& N
0 m6 p8 J% r6 G+ ? public Object buildActions () {
. o" y1 i* N. F" X( C- k super.buildActions();
$ |/ h, p; ^6 f# h. W' o
; _' D0 _: v2 J8 i( Y7 i* \7 O // Create the list of simulation actions. We put these in
3 B } R) g2 Q0 e/ g // an action group, because we want these actions to be
. H1 U2 t/ a y" g q8 l // executed in a specific order, but these steps should
! c4 [& L; S: [8 P/ ` // take no (simulated) time. The M(foo) means "The message0 q9 f/ v" V! Y
// called <foo>". You can send a message To a particular! \) M, r) w. v3 W' Y) l
// object, or ForEach object in a collection.: n2 e1 Z8 i; j8 F1 T) H" V8 _9 H6 m
4 J- X: L c' C. _ // Note we update the heatspace in two phases: first run) Y) u a! ]1 R7 J3 w5 S( i; x
// diffusion, then run "updateWorld" to actually enact the+ h( l: N6 a+ O5 Z! e7 n6 v" ]1 K
// changes the heatbugs have made. The ordering here is) J7 v0 U6 W& B& [
// significant!
4 V' E/ W& B5 `; q * g8 Y6 J- @2 a0 |# f# b8 G+ w
// Note also, that with the additional
- b% D& f0 n/ K // `randomizeHeatbugUpdateOrder' Boolean flag we can* I1 N3 P/ N# c9 a- P
// randomize the order in which the bugs actually run Y/ `. t- Z5 ^; ^7 O
// their step rule. This has the effect of removing any4 G2 ]& Z' [7 [1 h: l9 d
// systematic bias in the iteration throught the heatbug6 W7 W/ a: ]: U( o" i; D( p
// list from timestep to timestep5 @! H, f F' Z. \& I: ~! i
/ a0 V8 T" x6 M+ H4 q" ^* o
// By default, all `createActionForEach' modelActions have& L$ _4 B0 |) t- t
// a default order of `Sequential', which means that the7 T2 r3 l8 s( l
// order of iteration through the `heatbugList' will be
* G" P$ C+ f; p3 h: y# t5 l0 g! A: O // identical (assuming the list order is not changed
2 w6 l) m, ^' \4 `# e5 m // indirectly by some other process).
8 I0 K: {! s3 _ T' _" a$ p: `
( o8 H3 j# l2 o/ S% T" q modelActions = new ActionGroupImpl (getZone ());
1 ]" F8 u$ ?2 w8 @0 c v( u* s/ e0 Q" \% K0 o9 J+ j) z6 n
try {
0 g2 ^ J0 z" X" M; _) L+ V modelActions.createActionTo$message
0 e( g5 ~+ ~- x' d4 m3 e3 x. m (heat, new Selector (heat.getClass (), "stepRule", false));, E$ O6 d4 _: y$ `( K4 U
} catch (Exception e) {0 H. X+ T' n: a! W
System.err.println ("Exception stepRule: " + e.getMessage ());
2 J- Z0 M' X9 p m6 h }
' b6 t$ H5 c. |' v+ t: U: U/ y' ?0 o! e# T% H; I
try {
( X; R" ]$ W e9 B Heatbug proto = (Heatbug) heatbugList.get (0);
& l3 {# L% r0 h9 D$ O Selector sel = , b8 I" _( K' z
new Selector (proto.getClass (), "heatbugStep", false);
3 c4 n4 ~/ \) {- E. z# C actionForEach =! ]3 x8 E/ I/ O: w* }. c
modelActions.createFActionForEachHomogeneous$call
& M+ P- B, o; G- `5 u! [2 z (heatbugList,6 z4 _+ c0 V8 ~: U- @- X2 V, m
new FCallImpl (this, proto, sel,
) r, U/ q. V" _3 @- y) [ new FArgumentsImpl (this, sel)));. {+ e2 @- Z7 ?9 B- L+ h
} catch (Exception e) {
# d4 W- T) e" i3 I e.printStackTrace (System.err);
- W7 w0 z+ `2 x/ k3 m }
* x- S! t! X# S! d/ g; S& x5 y" o ) l) W; }1 D5 d2 R
syncUpdateOrder ();
' ]0 G: M4 V( R- J1 n5 y8 O2 X* Q, T, q
try {$ ? k* a8 c- T' D3 d' A* F
modelActions.createActionTo$message
. o7 Y! y/ X. F0 w# w" k- ^' p2 k& T (heat, new Selector (heat.getClass (), "updateLattice", false));
c6 ?4 e4 O7 n3 u5 Q) m$ M } catch (Exception e) {
, q) \# ~& T9 J: _( g% O" H2 R System.err.println("Exception updateLattice: " + e.getMessage ());2 C" D6 `# \% _" z' V2 r
}+ Y9 j& |3 y4 ] |- G
& x% f; V7 F7 j! q, H // Then we create a schedule that executes the) h2 N' L7 H* S' n
// modelActions. modelActions is an ActionGroup, by itself it) ~- f/ ]% E5 E! ^2 ]: p$ ~; ]3 a
// has no notion of time. In order to have it executed in
$ L/ t) z4 k% }6 F // time, we create a Schedule that says to use the2 C2 L7 |9 I, t; s7 m
// modelActions ActionGroup at particular times. This1 {9 Z" Y! L! F% F5 i! Q& O
// schedule has a repeat interval of 1, it will loop every
) S( i" h k4 v) L5 e1 V6 ? // time step. The action is executed at time 0 relative to
# ^) ~: g1 L3 Z4 B8 `. g) D, [ // the beginning of the loop.
0 ]( c) F& O. S, R" t. n7 j I- \2 Y5 O! e
// This is a simple schedule, with only one action that is
]/ z+ }- b$ W. ]! P7 [ // just repeated every time. See jmousetrap for more0 F' i, r* N( c( q1 Y, I% k
// complicated schedules.! C. O% L+ I2 V. Y4 a1 i
+ @# L% L6 k. ^( A$ f
modelSchedule = new ScheduleImpl (getZone (), 1);
- c# e3 W5 L; U/ h modelSchedule.at$createAction (0, modelActions);& d0 D! O9 w$ f. ^8 A
+ i) n$ B* U1 B# g8 G- w return this;
2 g- v" K7 M( h* T% j3 n/ W% e" q } |