HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ ~: z, g! w- b9 f/ P
6 c* u0 i4 d1 ^0 R$ T5 k6 q public Object buildActions () {# H% G1 t1 Z5 n8 @/ ?
super.buildActions();
5 h3 F( X/ `, e1 e * A# Q2 [$ g) D3 ~2 y
// Create the list of simulation actions. We put these in: t0 s: @9 f+ a3 U& l# e4 J) d
// an action group, because we want these actions to be; A5 a( J ]3 {5 w! h
// executed in a specific order, but these steps should$ }7 e9 Z C/ {# S: i6 ~: c
// take no (simulated) time. The M(foo) means "The message- Y! x. m+ ?; h; x3 ^; o- r, y( `0 V
// called <foo>". You can send a message To a particular
- G7 r0 V8 }$ [5 B& k // object, or ForEach object in a collection.# k5 `- J2 k) t0 k( X6 v
" z& x9 O* g* N8 K% f+ B
// Note we update the heatspace in two phases: first run
$ ]5 N5 r. e+ F // diffusion, then run "updateWorld" to actually enact the
1 e* z2 p( J# X4 d p // changes the heatbugs have made. The ordering here is; U2 E0 }( J7 s; w1 O
// significant!
1 B0 L% Z3 A5 n" `
/ T) N- L0 b; l, s. H% V2 I // Note also, that with the additional
1 |0 x9 {# v3 L* u // `randomizeHeatbugUpdateOrder' Boolean flag we can' w( @- Q" N% I4 D
// randomize the order in which the bugs actually run4 b- x8 M9 |, v$ F' _3 c1 _
// their step rule. This has the effect of removing any
6 \- @. S1 S, K: @2 L6 U. z // systematic bias in the iteration throught the heatbug
' Q1 m2 l" J8 V3 E! E% F3 o // list from timestep to timestep
: n& V5 {2 v) I
: I9 _2 D0 r9 r& D }* c( T3 d // By default, all `createActionForEach' modelActions have
2 J* ^8 i+ ]$ Z+ d' ^ // a default order of `Sequential', which means that the8 d# h6 d* Z$ F; M! I9 |- [( Z
// order of iteration through the `heatbugList' will be s* x: @; t+ j6 ? A1 C8 L! I* L
// identical (assuming the list order is not changed
( B+ J2 M& f. c6 X' T0 N // indirectly by some other process).7 X9 d$ D4 d7 K3 d. U+ V- x
% b1 D J |/ s( ` modelActions = new ActionGroupImpl (getZone ());
+ [# ?, h: p7 G. P$ Z6 _ V* D1 ]8 f. Z
try {3 S! G7 \) d/ X7 V
modelActions.createActionTo$message
$ W+ e6 c; N: N (heat, new Selector (heat.getClass (), "stepRule", false));
; [7 p; c5 [) f } catch (Exception e) {# g6 Y q7 v4 J- j& C, n: P4 }
System.err.println ("Exception stepRule: " + e.getMessage ());% Z/ `5 K1 Q6 ~; N! _; H' F
}
5 y4 c0 ?* M$ |* w" f0 W1 j( M2 H1 R( l8 a) `# ^! S
try {6 F1 G: W3 C2 |1 F1 t: P m/ v
Heatbug proto = (Heatbug) heatbugList.get (0);
, q+ s5 Q' u( O& h Selector sel =
; u y4 w, l1 { new Selector (proto.getClass (), "heatbugStep", false);
& }5 _" t, z' Q9 A/ A actionForEach =5 R3 t" X5 L0 z9 Q
modelActions.createFActionForEachHomogeneous$call
( u: k7 |: J" w( R9 n, a (heatbugList,
) N7 ], R( ~3 N7 c3 |4 R) D" ^ new FCallImpl (this, proto, sel,9 F* A2 u& _# c6 r; @' p9 D( |
new FArgumentsImpl (this, sel)));
& x4 p' T: f: o% |6 r+ ~ } catch (Exception e) {
0 t0 @' F3 u) L# P7 G- F0 Q e.printStackTrace (System.err);
' b/ m* k9 R0 G2 ~ }) e. |! B' B9 b
' q. X: [. F5 o( c s
syncUpdateOrder ();2 {4 z$ R4 z% O
! A( k3 R0 V$ b" g
try {+ D l8 H) ]% W9 T5 L l8 {
modelActions.createActionTo$message
; L$ P8 u6 k& d6 |+ k5 s3 |* v (heat, new Selector (heat.getClass (), "updateLattice", false));8 g: ?8 ^0 j0 l1 N5 [
} catch (Exception e) {
9 t2 r9 M: r+ m# w0 P5 N; {! H System.err.println("Exception updateLattice: " + e.getMessage ());8 N/ [# ?1 n3 n3 U5 c
}
+ p7 w: n* U# [; B* T* k7 a 5 I; ]1 c0 m9 z. @+ ~- G
// Then we create a schedule that executes the
' h( b7 y9 n* N2 ~" H! O // modelActions. modelActions is an ActionGroup, by itself it: f9 W' l- ?# t5 \
// has no notion of time. In order to have it executed in
% m% x: E& M) t: B // time, we create a Schedule that says to use the
+ T1 [6 X: q0 E. p // modelActions ActionGroup at particular times. This5 e' W3 f8 F4 G6 V, Y0 c- i- r
// schedule has a repeat interval of 1, it will loop every
9 U& D/ h1 s( g3 U: i& u1 z // time step. The action is executed at time 0 relative to, p7 q3 l: t( C. I
// the beginning of the loop.
, y. `2 [' B9 j& y
, {1 C: Z8 b* S7 q) T: c) Q2 }+ W // This is a simple schedule, with only one action that is
+ S: E. P; v% a# g6 ^( b) \1 S // just repeated every time. See jmousetrap for more
$ T2 N: o+ l1 @: D+ y; H // complicated schedules.4 l; T; p# B, o' ?, V, e# [6 G
% t: ~, i, d& f( z7 L6 J0 i2 Z
modelSchedule = new ScheduleImpl (getZone (), 1);4 ^+ m% S- U% d; m% b
modelSchedule.at$createAction (0, modelActions);
+ d+ `- m% f4 z5 T- z" {6 x8 _6 E
! r& x( |* N$ x* r! ?* S5 B6 P return this;
4 w: W4 r% N, N" d2 L( L } |