HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ N1 h( s8 N% ^. B! k' Z3 p0 L, d: S
4 b( R( N- ~9 j G# ^8 K
public Object buildActions () {% |, S; W5 S, v1 }1 K# |- Z
super.buildActions();0 W$ m: K* `* l& C
& c: f( u2 f+ A
// Create the list of simulation actions. We put these in
. h6 q0 R$ ?4 ]& Q/ ^' ] a // an action group, because we want these actions to be- ~2 S6 |3 g" }! e
// executed in a specific order, but these steps should( E+ h0 d8 ]" [' }4 o0 z$ v j/ R
// take no (simulated) time. The M(foo) means "The message8 w/ b7 H0 _2 P. C
// called <foo>". You can send a message To a particular7 S$ r6 L6 i. K% {
// object, or ForEach object in a collection." h; |3 ~# M7 H) A: o
N x: H5 s/ Z+ G // Note we update the heatspace in two phases: first run
7 l( ?2 g) a% N0 C U // diffusion, then run "updateWorld" to actually enact the; f6 L. r& q( S* W1 Y5 C
// changes the heatbugs have made. The ordering here is
$ \* \0 s4 L/ S" W // significant!% d- h4 K, Y3 ]/ n- F( c
( X" q- }, t; N* U/ n( Z
// Note also, that with the additional
0 ?/ q5 \6 b; [0 G' L+ a+ U // `randomizeHeatbugUpdateOrder' Boolean flag we can m! d+ o4 M/ p2 }# _
// randomize the order in which the bugs actually run5 R l% Y$ _ R9 P0 _6 N
// their step rule. This has the effect of removing any( A" i* k$ g: b* K
// systematic bias in the iteration throught the heatbug
1 J# z) b. U. Q7 q. W% ~0 [ // list from timestep to timestep5 ?! I% n! M+ N
9 }5 F1 D/ d6 M# L5 ?
// By default, all `createActionForEach' modelActions have8 V8 m8 n+ L; h
// a default order of `Sequential', which means that the
1 T2 T! q; c- \; h0 X( } // order of iteration through the `heatbugList' will be- p4 h, B4 ^, b- F# u; q2 F' w
// identical (assuming the list order is not changed
7 T2 a7 ~. ?$ [0 G // indirectly by some other process).; P# s$ p5 \2 j: Q
* V @: H: r* X8 r9 _
modelActions = new ActionGroupImpl (getZone ());
. b9 ^( D6 [3 S0 I$ g& ^4 c8 j+ R' X P. _9 a5 h i& ]
try {0 h2 N T! Z0 G& ~+ \
modelActions.createActionTo$message
3 X: Q7 T; [, ?3 R I$ D2 o (heat, new Selector (heat.getClass (), "stepRule", false));5 h: l) a( J* ^: G
} catch (Exception e) {
# E4 {* \& \/ K4 i0 M4 T* f System.err.println ("Exception stepRule: " + e.getMessage ()); V2 M1 \6 o F3 i9 Z
}% i# Q& u% }2 g% b( U! ~. w
3 [7 w$ A) i! a% `, l, w* u try {
' ]0 n* ?1 u6 }6 m4 k- D Heatbug proto = (Heatbug) heatbugList.get (0);
2 w* M. E8 I' L! ^0 |. a+ ~- l' Q Selector sel = 8 T- |8 _& V+ E [7 x% s. v8 x
new Selector (proto.getClass (), "heatbugStep", false);
% Q7 c# F3 ]$ {( w6 o: c% j actionForEach =# ` [5 V/ a5 z' o
modelActions.createFActionForEachHomogeneous$call
- F7 d6 i O% _ E2 t. ]& ` (heatbugList,! z2 Q6 c# g( P: U# ]
new FCallImpl (this, proto, sel,* i6 v6 S5 v {$ u4 j3 P1 L
new FArgumentsImpl (this, sel)));
2 l7 K7 b: S" E } catch (Exception e) {8 J% E3 E( {. G
e.printStackTrace (System.err);4 `. V2 Q1 c( m
}/ i* c$ _ I: N1 d
! w% |7 Q5 q( N4 P4 C5 H. d1 r
syncUpdateOrder ();) t* r; a' x2 B( E0 I. c( O
3 { R" A! g9 A% G7 h& R6 K% `6 Z6 p
try {; @& R; H+ w- B( e6 T! P$ F& [
modelActions.createActionTo$message
! f% V" S3 n# ^ (heat, new Selector (heat.getClass (), "updateLattice", false)); X# {" P5 _: W
} catch (Exception e) {' g1 j. j$ r! p1 e5 y6 l
System.err.println("Exception updateLattice: " + e.getMessage ());
/ J, T$ Q; U) p5 H8 f0 V }
3 c* X/ q# {) m, f( Y& H; o$ A
3 e4 S O# k, x& P // Then we create a schedule that executes the4 d0 q# a* q5 y" P0 I+ K: o
// modelActions. modelActions is an ActionGroup, by itself it1 D w/ j" \ Q& V- E2 l
// has no notion of time. In order to have it executed in
+ x0 E- i- N H: o Z4 F; G // time, we create a Schedule that says to use the
: h k% N+ _/ z2 P9 u // modelActions ActionGroup at particular times. This
* P7 t9 ~! x$ B/ v9 ~. x // schedule has a repeat interval of 1, it will loop every& U( u/ Z ^3 o
// time step. The action is executed at time 0 relative to) Q' {' g' \ t7 ]& T( v
// the beginning of the loop.
' [. U( g* z `. I
d: V" H/ I2 q* w4 d9 u // This is a simple schedule, with only one action that is
2 C0 T6 S2 {; `, [ // just repeated every time. See jmousetrap for more
% |1 }; |/ ]: z/ t$ E# G // complicated schedules.
6 }2 Q/ ]0 L. q3 y" Y; m" Y
: f" ^3 G( X! c/ f+ c" O& k: g modelSchedule = new ScheduleImpl (getZone (), 1);
% |6 ~% w( n5 A& ~9 o! C4 P modelSchedule.at$createAction (0, modelActions);) G3 v; _( F& X, k7 F
. R) t- t: q) C return this;6 M+ I {6 m [$ d4 G
} |