HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% S5 a8 a% L3 ]
$ Y* O( t) q ~; p W; ?( }2 |6 ^
public Object buildActions () {4 ]4 z# p+ W8 P- |6 _5 U
super.buildActions();) n8 y5 E2 E+ ~1 u( ]( p
, C# S% ~. F8 ~( S8 e) j' I$ ^) v9 N
// Create the list of simulation actions. We put these in9 N8 Y' R$ h5 Y, I& ^$ N
// an action group, because we want these actions to be7 Q6 p7 [3 k) P( G: K* G$ @ w
// executed in a specific order, but these steps should* ?( _7 W- i6 `; p7 M2 v V
// take no (simulated) time. The M(foo) means "The message4 M/ i/ H9 f2 ?, {
// called <foo>". You can send a message To a particular
3 y( i0 C Y& ~$ H // object, or ForEach object in a collection.5 A0 f7 R3 \7 N# _- |. H1 q7 D
$ {" L5 H4 q1 b: [, s: V8 U // Note we update the heatspace in two phases: first run- W) T' B4 Z, w" z$ W- \9 Q
// diffusion, then run "updateWorld" to actually enact the3 }8 y( |. x+ i5 w7 |' \1 u
// changes the heatbugs have made. The ordering here is& z5 j. s: c% U- [
// significant!( S: U, n! o* F7 |) I; \
/ V/ K: B5 ]& H7 `: y* p0 ? // Note also, that with the additional
" T+ A3 M0 K0 _ A/ G. r' I // `randomizeHeatbugUpdateOrder' Boolean flag we can3 m: L. _# ~) B# |9 e8 q# y; M
// randomize the order in which the bugs actually run4 S2 ], f+ [+ _& p& `( B3 _3 ]
// their step rule. This has the effect of removing any
; J) X6 C0 V) F- z5 e- f // systematic bias in the iteration throught the heatbug, i8 A3 u" H' n9 E3 o2 b( P$ f
// list from timestep to timestep! r' h9 s: e$ h1 g
/ ~7 e; ^. w3 T // By default, all `createActionForEach' modelActions have! C; T% | p2 v( O
// a default order of `Sequential', which means that the
8 Z* j; H" `! n, G // order of iteration through the `heatbugList' will be" r( J. o9 O7 N% C' y( ~
// identical (assuming the list order is not changed$ C& @* ^' x% Z7 x. q. W, H' L- u
// indirectly by some other process).
" Q( d: [" v4 W; V2 R0 h/ x, _ V3 F% |+ Q9 \, Q3 ?; c
modelActions = new ActionGroupImpl (getZone ());
& H5 L0 W. j- S& F2 b2 M3 O' O; W# b* g, Y% v$ d+ ?! h( Q& B
try {* s9 g/ [0 p* A; `/ T
modelActions.createActionTo$message
6 X2 L ^# G/ n5 V (heat, new Selector (heat.getClass (), "stepRule", false));* F" n5 ^. M1 E5 x
} catch (Exception e) {( i N( l5 L2 R6 i) r
System.err.println ("Exception stepRule: " + e.getMessage ());0 y7 C, ]4 ~$ n) q! \ q
}! n: @% A8 ?. J f4 M7 p$ K
6 D( ^* M6 W- |4 E try {
7 i/ p& r: D9 Z7 G$ \2 N Heatbug proto = (Heatbug) heatbugList.get (0);3 Z; H! v( B; _ q! A
Selector sel = - A! ] H2 h0 h6 Y5 t8 _
new Selector (proto.getClass (), "heatbugStep", false);. F3 K+ P* L, R1 e: E+ p0 D0 L+ n
actionForEach =
% y5 o/ E2 y5 s. _ modelActions.createFActionForEachHomogeneous$call
/ H. U! [$ B1 F$ ?9 J (heatbugList,
! u1 V0 j: A% c- ~- k7 R new FCallImpl (this, proto, sel,
! {/ n" y& l* j; Y) `. t new FArgumentsImpl (this, sel)));$ E8 T; V# P( e" ?' j7 L" j
} catch (Exception e) {( U* P6 K7 S) J# I
e.printStackTrace (System.err);
7 e! `8 V2 f0 c: y3 c N% a- Y }. y0 I, i" z; D- @% W9 W" D7 Y
+ U9 a& r. R- w2 l1 {
syncUpdateOrder ();
# f v b8 `* f3 ]" e
4 \. t' A, B8 d6 g/ a$ g6 C try {
$ v$ k& v5 d' y0 J modelActions.createActionTo$message . b! b# ~4 }( q
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 x; \# G, `1 V } catch (Exception e) {! B3 \/ {5 Q& R( \! N" E5 |
System.err.println("Exception updateLattice: " + e.getMessage ());
# S1 l1 d# @0 u, }8 d }+ Z4 r2 m! L8 E7 W7 O
4 x& R% S2 L0 } Q
// Then we create a schedule that executes the. w( q, D+ h) L: k. \
// modelActions. modelActions is an ActionGroup, by itself it4 u: H. j, p) a; s4 V% W
// has no notion of time. In order to have it executed in# w% ^ c, K o5 d& w6 g
// time, we create a Schedule that says to use the+ I$ }4 S* a# Y d! a/ D. Q
// modelActions ActionGroup at particular times. This
/ q- A1 A. y+ N9 w- B4 W" G // schedule has a repeat interval of 1, it will loop every
% R) s8 g. H' F4 X // time step. The action is executed at time 0 relative to/ _, e( Z( U" s+ N! u. N
// the beginning of the loop.6 Q& b: Z) F. e4 t+ @+ f7 b
( E5 |# I% j0 g8 ~+ [$ ^5 k
// This is a simple schedule, with only one action that is
' b* e6 y4 a2 y // just repeated every time. See jmousetrap for more) _9 @- O8 G% Y! R& ~* C8 l
// complicated schedules.& d5 n! ^4 ?( {$ k
; Q7 x6 [: [: G' R) H S0 i modelSchedule = new ScheduleImpl (getZone (), 1);
n2 _. ? L2 L modelSchedule.at$createAction (0, modelActions);$ A1 j, \5 W ?/ U- y- g$ [
6 K: s& _6 b) o5 ~1 a return this;9 k& ~6 r; l" N/ |9 a4 K
} |