HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 H% Q3 u: a+ p4 X/ W1 t- `
% [ N) q B% N; | public Object buildActions () {) @" k w( @& e0 g; q% G
super.buildActions();! N3 ^7 K5 [+ E6 O& v6 f
- X1 s6 ~+ k6 A# N5 Z5 B% b& S( F8 @
// Create the list of simulation actions. We put these in
8 a- w' Z9 q/ f3 J5 H // an action group, because we want these actions to be
5 C5 K) X/ |2 S" \& D) X4 E // executed in a specific order, but these steps should" o' a' M7 N2 V3 }- a8 x
// take no (simulated) time. The M(foo) means "The message% }1 N# R' Z' X5 ]- ~. `
// called <foo>". You can send a message To a particular, `; _$ ?3 |6 \ U
// object, or ForEach object in a collection.
3 M7 ?! Y( N2 m
1 J: [ k: F0 |7 |4 I3 `+ C! b // Note we update the heatspace in two phases: first run3 q+ \+ V" X- g+ _/ A
// diffusion, then run "updateWorld" to actually enact the \ L* B4 |* ?9 e/ n
// changes the heatbugs have made. The ordering here is
+ \( n ]6 T1 L( r N% [ // significant!
' k- B3 }# C7 U * V$ I5 e% G! i: P- q. E& C
// Note also, that with the additional
2 m3 J1 C* X6 L/ t6 i. [* W2 b7 h // `randomizeHeatbugUpdateOrder' Boolean flag we can* e# S" g" P q! E [6 w; j
// randomize the order in which the bugs actually run
$ m7 F" q! D% @ // their step rule. This has the effect of removing any
$ N2 G% V& X. ^% c, n. s( x // systematic bias in the iteration throught the heatbug+ ]9 b" s; A! I% @% c1 O3 V3 ^
// list from timestep to timestep
6 ^8 d6 j2 A8 y) W) _! W. U' J
# U/ y( G* M& ]+ g // By default, all `createActionForEach' modelActions have
/ P: y& J* a% ?# r6 W; x( A6 _0 _ // a default order of `Sequential', which means that the# z' }; h) ^3 b/ @
// order of iteration through the `heatbugList' will be
8 U+ }/ Z/ f/ a4 t. M( Y // identical (assuming the list order is not changed' R! s4 ?% T v5 `! Q! F$ U, R" w
// indirectly by some other process).
+ u) m# V' n) s" ` 6 l {1 M: F G* V& v4 o# o
modelActions = new ActionGroupImpl (getZone ());
1 p3 @/ k/ L1 u8 t1 A J, X# C. B0 e
try {
. v. v6 \! H" ^2 A7 R5 k( x8 V modelActions.createActionTo$message
3 H+ z% D2 m1 d7 y0 l6 t (heat, new Selector (heat.getClass (), "stepRule", false)); l4 Y9 s& \# k0 j1 K
} catch (Exception e) {$ ?: A7 N) T( O! F' b8 `- m
System.err.println ("Exception stepRule: " + e.getMessage ());# _8 d3 H( I( D4 \/ ^
}4 A( H* Y! J$ }! X
C7 O- ~8 P9 ~
try {
% M2 C$ D$ _7 G! n! A# M( A) s A9 { Heatbug proto = (Heatbug) heatbugList.get (0);
# F- E* H4 {( c3 i4 A) R, f Selector sel = 4 W: x5 R, {1 b; X9 t; K7 [7 C
new Selector (proto.getClass (), "heatbugStep", false);7 n9 M2 w, _! O( N0 W1 J# @ |6 [
actionForEach =
! g8 L( c3 B2 _. z modelActions.createFActionForEachHomogeneous$call
* Z c6 ]. F' @: W3 J8 A (heatbugList,
1 [* S5 S3 j/ w9 p4 N ?6 @2 M: A new FCallImpl (this, proto, sel,
, u( o) n" U6 p \$ C& k% B new FArgumentsImpl (this, sel)));
: Z! d$ K5 z( H3 h" c! D8 u } catch (Exception e) {0 f/ V$ Z$ _7 ~% t I0 \: L! M4 |
e.printStackTrace (System.err);
- u7 K; z' T- U# i5 |( s/ e$ r$ [ }; }+ B/ P2 Y5 w' o, U: ?
7 ?9 m, x& h$ Y0 @" P syncUpdateOrder ();
/ _' _, t+ T3 B% \% [2 I# {5 Q, g
+ J9 j* l# O. D8 S5 p8 V try {
1 n3 w( r, Y6 |5 z } modelActions.createActionTo$message
) p: l$ V& `& J7 n! t1 }- ?3 r (heat, new Selector (heat.getClass (), "updateLattice", false));+ N T) S8 c3 {
} catch (Exception e) {" u5 D( L9 g$ E( V4 B
System.err.println("Exception updateLattice: " + e.getMessage ());
, V) f7 t7 O$ T2 G }
+ ?' ^, I$ O# d% ~/ l$ }
, Y- z4 d$ m) u$ I- v+ E) Z) ^) Y // Then we create a schedule that executes the; R8 r3 H# z; J0 K# t
// modelActions. modelActions is an ActionGroup, by itself it4 i' u1 b1 ]& V, u) ?' s
// has no notion of time. In order to have it executed in6 p% W9 a: K# C/ Y6 ~0 b# l
// time, we create a Schedule that says to use the
+ M2 v+ F6 ?+ [. R7 i // modelActions ActionGroup at particular times. This
0 z* X. @& x! b6 i // schedule has a repeat interval of 1, it will loop every
- o' C) u3 Z7 j2 F8 ^' Y e // time step. The action is executed at time 0 relative to
( p. d `+ `: _' [7 o; t // the beginning of the loop.
2 G# e) w7 u: n! p D1 t! A' Q4 y# u# J
// This is a simple schedule, with only one action that is
2 [; J* B5 S' \* ` // just repeated every time. See jmousetrap for more
% x) ]* ^$ J9 Y* X8 }& M // complicated schedules.
$ u# Q2 E6 G$ ?* U. S5 |* D9 E3 U 6 z& H9 A" [- |! N% ]
modelSchedule = new ScheduleImpl (getZone (), 1);+ }& v; G- E8 N; d8 K
modelSchedule.at$createAction (0, modelActions);
& Z9 w1 a: w" ?4 C2 I0 M
! K- C# M' F% x7 R) x( w return this;
2 W0 J/ s8 J9 Q8 X } |