HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 n# j1 p" C0 N& h1 F E
* w- q# d8 e* M4 O- F+ H8 h public Object buildActions () {
' U' u: D( ^9 X2 c& M super.buildActions();9 Z0 }7 f z6 `& Z L) j8 e
% d( c; n% O. H* {
// Create the list of simulation actions. We put these in
- l/ E+ ^+ B. @6 L+ V // an action group, because we want these actions to be: B) d9 I/ o! j% F. U
// executed in a specific order, but these steps should( f" r z( `% ?1 M
// take no (simulated) time. The M(foo) means "The message: P0 C$ { i" q
// called <foo>". You can send a message To a particular! D& M: R. l+ q: V
// object, or ForEach object in a collection.5 t/ F' G- M! M5 \* v1 K4 l0 J
' z6 c- X' ^7 L* I- {" Y! J. o // Note we update the heatspace in two phases: first run
! R& p4 L4 j) Y+ w+ W, H0 }' f // diffusion, then run "updateWorld" to actually enact the
8 @3 ]/ O, _) A // changes the heatbugs have made. The ordering here is( H- P* @% n( F: D. m
// significant!$ d& W+ @+ F; C
- I3 [8 L" Y- m# ~# T) I3 O# u // Note also, that with the additional6 D1 d7 o% v4 O4 ~( D' b( ^5 x# d- L
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 h# p+ u' R9 V // randomize the order in which the bugs actually run
7 y& L+ q: z }6 X" I // their step rule. This has the effect of removing any
: q# f# D1 K% O: G+ e3 y // systematic bias in the iteration throught the heatbug, y' V$ u) U S9 C
// list from timestep to timestep' X+ |) H5 x2 _, g
/ F' F5 }- M1 C9 f: A/ O
// By default, all `createActionForEach' modelActions have
- z0 N+ Z* N% K1 W) m2 N8 F // a default order of `Sequential', which means that the
, i; B* q2 @& G/ }* S" B) A$ I // order of iteration through the `heatbugList' will be
1 i: x/ x2 u V/ L; S+ } // identical (assuming the list order is not changed# w2 N4 W' u: d# F" a
// indirectly by some other process).
9 _' S8 q6 g$ {" a
, Q g1 L b* N* j) ~( t modelActions = new ActionGroupImpl (getZone ());
3 k+ @9 b9 t, I* @3 K( R3 L1 B
1 U1 j: N" ~3 p& L( m try {* H4 {# \9 O$ _ c1 D2 E+ A1 \0 A/ W1 Q
modelActions.createActionTo$message G. o P0 E! A
(heat, new Selector (heat.getClass (), "stepRule", false));) q" p& ^% w% L" M R2 x
} catch (Exception e) {
& { ~& p3 w4 C( P. ] System.err.println ("Exception stepRule: " + e.getMessage ());
- a. z. F1 V3 i0 J" k& d }( F1 Z% l$ |$ _; U- }' a) M2 X
8 R' C1 [" G4 `! p try {
2 a. v. q1 a- c) ^7 I5 E6 G Heatbug proto = (Heatbug) heatbugList.get (0);9 [& ^6 ]* x/ M9 h1 M
Selector sel =
4 u- S/ i5 Y: n N+ W new Selector (proto.getClass (), "heatbugStep", false);
9 u9 Q' H1 L' Z) h8 A$ Q actionForEach =/ \1 k. j' S5 D- l
modelActions.createFActionForEachHomogeneous$call
* R# c* \2 _ M) t* i6 K (heatbugList,
# {, W* ]; \6 ^! Z U, q. _ new FCallImpl (this, proto, sel,) h( \. v, N# o5 k
new FArgumentsImpl (this, sel)));
. g% Q9 u3 |$ z$ ~) y6 k, }8 S( _ } catch (Exception e) {5 M3 W2 [. d; s P) |( k
e.printStackTrace (System.err);7 b& @" ?( \0 c3 _ F1 i
}. _/ O3 R" Q, ~
' ?+ b$ b+ F# @' b" R+ ~
syncUpdateOrder ();% U& A7 i2 |9 w. ?& F( y
% p; N; }, U: A2 t2 b0 S
try {
3 e$ @7 M: S" S% e modelActions.createActionTo$message * e* R8 `6 \5 H% l3 d
(heat, new Selector (heat.getClass (), "updateLattice", false));
; X W) a+ Q% C* [1 u } catch (Exception e) {3 |7 m5 K) q$ ]$ d
System.err.println("Exception updateLattice: " + e.getMessage ());
& V) s( F8 J6 ]+ a) L$ j }
! p4 `3 [) K; O/ t% U( @- } , n6 ~, w5 o0 v9 d
// Then we create a schedule that executes the# _& }$ I5 E& U0 k. i; i1 N+ R
// modelActions. modelActions is an ActionGroup, by itself it+ o/ B7 C# y1 c8 i
// has no notion of time. In order to have it executed in1 G% M! H7 Y6 b3 |# ]
// time, we create a Schedule that says to use the
3 K f/ J! h2 {9 n/ ^5 G // modelActions ActionGroup at particular times. This
: E" E4 @ n- C; i! B // schedule has a repeat interval of 1, it will loop every; |- P/ H- [9 I' @4 ?! ?* O8 e0 B2 \
// time step. The action is executed at time 0 relative to
1 ~' s k' q8 p b // the beginning of the loop.( {3 ~: E8 Q! x; Y- I( G
+ O0 e" J+ ~$ Q7 k2 x // This is a simple schedule, with only one action that is0 ~: r+ P; T9 W. @3 Z$ {! g
// just repeated every time. See jmousetrap for more
( C2 B0 b) c( v) w+ A) H6 S // complicated schedules.4 K6 h. b8 f' F* R
9 d, o+ T8 S9 `$ O/ f2 F
modelSchedule = new ScheduleImpl (getZone (), 1);
) f- r, i; |) {% d* T5 d) T modelSchedule.at$createAction (0, modelActions);
, M5 _) C( o; ?( b
% n3 ]2 I' n. |7 Q# ^3 [ J6 z0 F return this;1 v1 p" t- g7 X0 M6 `0 H, v' w
} |