HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 @5 o* j9 E) g3 R
4 ~5 w; H* @, X1 D* c! ?# h0 K
public Object buildActions () {
! A" h" Y, }3 x. q: m7 ^1 [ super.buildActions();
" n! o2 G8 R1 Q7 ^" F ( m8 ]1 @2 n5 v1 {4 K0 s% Z9 ^
// Create the list of simulation actions. We put these in
" L& B4 F+ {/ }; O // an action group, because we want these actions to be
% r1 k, w( r$ ?5 \) t) | // executed in a specific order, but these steps should
$ e+ E8 C. B4 {9 d E // take no (simulated) time. The M(foo) means "The message5 t9 S2 U; o- G& q( N9 ~; d
// called <foo>". You can send a message To a particular
; ]" D; V: X8 \ // object, or ForEach object in a collection.- p& x. U% p0 J
7 M: P6 K' t0 [2 K- w5 F. ~, r: |7 H
// Note we update the heatspace in two phases: first run! U$ J+ T5 b' ~; y# }7 _4 H
// diffusion, then run "updateWorld" to actually enact the
0 o/ O: @) I5 z n' L // changes the heatbugs have made. The ordering here is: Q1 u- }# I' c9 n o
// significant!
- `; v6 Z2 ^# Y7 n+ V ! A8 x! @( Y' u5 t4 u$ c
// Note also, that with the additional
0 ]% w( f% i1 d( V% ^ ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can8 f$ |" w) w- p) {; h& C
// randomize the order in which the bugs actually run
* f$ }% ?3 J3 y$ i2 F$ B& a( t1 v# f // their step rule. This has the effect of removing any o/ G0 S2 t3 X4 C( d3 R/ |. d% S
// systematic bias in the iteration throught the heatbug$ Y& b3 ?4 n- g% R7 q
// list from timestep to timestep% Q( t$ u, f; l- Q" e
I0 f5 r$ G: d. D4 d
// By default, all `createActionForEach' modelActions have
' ]# T. x% x6 Y0 X; ~ // a default order of `Sequential', which means that the) V# H4 f& i/ {( d' p. F6 X
// order of iteration through the `heatbugList' will be+ w8 b2 @, R$ x) `# U
// identical (assuming the list order is not changed7 \, l* G7 j' ~* ]2 Z3 B. p* K g
// indirectly by some other process).
' T) @- |0 r8 ^+ U- ?, g% t
- H8 o6 n/ q4 _4 J7 U2 [1 p modelActions = new ActionGroupImpl (getZone ());' `& N; |+ `; M, x2 U6 }
: s7 {( e* D2 q( E# D+ T
try {
# L- w. B7 N8 y0 w modelActions.createActionTo$message C$ Z8 L: ^" N4 }. p& X3 G
(heat, new Selector (heat.getClass (), "stepRule", false));' @) u4 w4 U, F. r5 x
} catch (Exception e) {, Y! ?/ P, G) L2 Z1 N% _3 h
System.err.println ("Exception stepRule: " + e.getMessage ());
+ T( _8 d' Z- d }
$ t1 P1 Q& _/ q4 i& a+ J
& Z6 H/ F4 F6 s! k2 l try {
! c% R ^7 K% w2 c Heatbug proto = (Heatbug) heatbugList.get (0);
' ]3 }# Y8 Z" r) c9 _ Selector sel = 0 G8 g* u1 [0 U3 V* t0 d3 |
new Selector (proto.getClass (), "heatbugStep", false);
- W/ U1 A' a. C& { actionForEach = e9 d! e$ W- n
modelActions.createFActionForEachHomogeneous$call6 w0 d+ H6 p% e9 E s& f- l
(heatbugList,4 i$ f7 ?( |7 d6 S$ I/ ^2 p9 J2 w
new FCallImpl (this, proto, sel,* l, |3 m; Q8 `5 [
new FArgumentsImpl (this, sel)));2 O- N5 d6 J0 o; m
} catch (Exception e) {
* D$ V$ L; G- u e.printStackTrace (System.err);
' n$ M9 M- H8 T* Z }
~3 u7 h7 Y5 R) d0 e2 i , T4 h# Q9 I# d# T
syncUpdateOrder ();
4 n [/ f" A& R* L- K9 \1 ]7 G- V9 h: Y4 }! H7 V6 `; ^2 F7 x
try {9 e9 j) ?, u) {5 C( j) `
modelActions.createActionTo$message 1 b4 x2 T' j! p% H" Q
(heat, new Selector (heat.getClass (), "updateLattice", false));1 ?" m& O g5 A+ r
} catch (Exception e) {
3 o4 O% q3 ]5 [3 [ System.err.println("Exception updateLattice: " + e.getMessage ());, l6 y$ j- z# q# i8 `
}# V+ I; O; N& e: m& j& A
: H# G% i5 x' J3 h9 |
// Then we create a schedule that executes the
, Y1 U) }; }5 L2 S1 E // modelActions. modelActions is an ActionGroup, by itself it
4 {& o5 t, v; [) O; c& c: t8 A } I // has no notion of time. In order to have it executed in
7 E1 ?$ C/ Z- }6 A$ U // time, we create a Schedule that says to use the
7 }" ]! X6 f; v' f0 @# s% | // modelActions ActionGroup at particular times. This
4 G' u$ E0 c# R# Q // schedule has a repeat interval of 1, it will loop every
+ r- ~/ y$ C. ~5 B1 B // time step. The action is executed at time 0 relative to
- I- U/ N- k) c4 y+ r // the beginning of the loop.
1 i$ A% ]# d% c5 X8 R, o% P
" H. R! J0 d3 V% ` Z // This is a simple schedule, with only one action that is* K* q4 m) N' J7 N3 @& N
// just repeated every time. See jmousetrap for more
: x- h( U$ p: k, @, m // complicated schedules.
. z2 W7 G8 J/ x
1 \! w$ w$ t$ f5 _ E0 v. Q modelSchedule = new ScheduleImpl (getZone (), 1);- f( ?' \. g7 Y- Q2 W- f0 u$ K, Y
modelSchedule.at$createAction (0, modelActions);
% S' X* b0 u1 r; o* B& y6 f
8 y4 B$ E8 {6 c: v w! a; j6 r return this;" U4 Y/ E6 {9 \8 O/ I
} |