HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 S v9 d4 E& d% F. F2 y
; Y6 R, B6 N z& B+ H# } h7 u public Object buildActions () {
F) i/ _) `1 K6 w* L super.buildActions();! U( c% k+ d: ^9 O
" Y( T7 _3 k( O# c- }$ D
// Create the list of simulation actions. We put these in$ ^) ^/ x0 W( A& @+ O/ c" e# E
// an action group, because we want these actions to be1 y. K) A3 I! w- @& `: @! a
// executed in a specific order, but these steps should
3 R9 b q; U/ a) O' L // take no (simulated) time. The M(foo) means "The message
3 _: c6 Z1 L# ?; K# k7 b& B. } // called <foo>". You can send a message To a particular
, Q$ v- \& W4 u+ _, Y5 A // object, or ForEach object in a collection.% n. I0 x: t/ D, E
$ k# Y+ ]2 N5 B2 N6 h // Note we update the heatspace in two phases: first run; O$ _8 ]$ M4 P1 B! d
// diffusion, then run "updateWorld" to actually enact the8 J. |0 b0 T* E+ b5 n7 [/ ~" r1 t" M* O
// changes the heatbugs have made. The ordering here is
# N& [: O) @2 D8 y* |( ^3 A6 t // significant!. L* j5 K7 `5 E. S
6 z4 z( j W$ X5 B // Note also, that with the additional
' U( {2 I4 `( ]7 e2 h3 Z+ @; Y // `randomizeHeatbugUpdateOrder' Boolean flag we can7 K( A7 C& [/ L% P. C* Y: c
// randomize the order in which the bugs actually run, m* P* Y3 o; B0 D/ J' q
// their step rule. This has the effect of removing any
* i1 t- p) _6 }: z9 F // systematic bias in the iteration throught the heatbug |2 W/ ]4 A' b% p# L0 a+ T
// list from timestep to timestep& R6 G, d" k) C6 h* V+ K
: x6 q( V6 A# O- _8 l' W& e5 q: b
// By default, all `createActionForEach' modelActions have
0 a/ `/ [) b9 N: ~+ V // a default order of `Sequential', which means that the8 V' @1 o! d. t% z% x
// order of iteration through the `heatbugList' will be
2 a/ w& w/ F9 Q! G // identical (assuming the list order is not changed0 Q" f: M8 z N: Z
// indirectly by some other process).8 U1 G6 N" f2 y M/ R, ~1 k/ e
$ u3 t" X, O9 k0 v7 i modelActions = new ActionGroupImpl (getZone ());% K2 j. Y* k( d0 j/ u* |& S6 ^# c
j g- o5 W u/ W2 m try {
% u/ ]/ o4 H5 W5 C2 R2 p modelActions.createActionTo$message) G$ N. X" u/ e+ I
(heat, new Selector (heat.getClass (), "stepRule", false));# x1 R. e* L" F+ ~; E# j
} catch (Exception e) {2 n$ M' \6 v3 y# y
System.err.println ("Exception stepRule: " + e.getMessage ()); A% Y3 ?5 F9 @% t5 C; G# s0 w
}
8 g' L6 [" W+ z
* W9 U# N' p5 Q& i$ G try {
( W. Z* r1 r; L4 _% m4 n1 b Heatbug proto = (Heatbug) heatbugList.get (0);
7 |; @/ P3 v' G0 _7 G- ^ Selector sel = 6 U7 H1 b% Q7 N7 z- p
new Selector (proto.getClass (), "heatbugStep", false);+ s' Q+ \5 x4 Y3 q- m
actionForEach =
+ J5 l+ M; u) I* k- D! @ modelActions.createFActionForEachHomogeneous$call; B2 O; K) O9 N" |6 e
(heatbugList,9 [( q+ G1 T. v( t1 U) h9 w# E
new FCallImpl (this, proto, sel,
2 F0 _: A6 ^; F9 u: [ new FArgumentsImpl (this, sel)));. M* H$ J- r* ?8 b1 ^
} catch (Exception e) {6 W+ x. y7 Z( b" Q5 k/ A0 i
e.printStackTrace (System.err);
0 @( ?* P. u8 D' m7 Q4 C }
$ A& b) Y/ e5 r3 w! o. F+ z 6 w8 l: C( u9 u. v1 i
syncUpdateOrder ();% w. t o4 X8 H$ g! q! U
3 `4 W+ y. M3 }5 c' z
try {
3 D( E1 `& V& c modelActions.createActionTo$message . B' i, I% ^7 Q% T4 r
(heat, new Selector (heat.getClass (), "updateLattice", false));
, j8 N7 q m6 x } catch (Exception e) {
( h3 u- G8 \( R7 P/ t9 B System.err.println("Exception updateLattice: " + e.getMessage ());/ Y. p- q4 h: y: A) J
}
+ l$ y6 {* A& y% Q9 F+ H5 z. ]
5 m( ^* r* Y9 _2 ]9 }1 D: b // Then we create a schedule that executes the
3 D3 F7 {% M) w- L" C // modelActions. modelActions is an ActionGroup, by itself it& a2 y: P! Z2 v9 Y
// has no notion of time. In order to have it executed in
7 p& Q' F# j: V- f# G& h$ e2 d // time, we create a Schedule that says to use the3 t* V7 g$ r& x3 v! u/ ?
// modelActions ActionGroup at particular times. This* u" Q0 A$ T6 N
// schedule has a repeat interval of 1, it will loop every5 M6 V& Q: f2 D* q- L9 [4 ~3 W. U- U
// time step. The action is executed at time 0 relative to
2 H0 [, V: G4 j; @& o4 b // the beginning of the loop.
) c, t5 C/ {2 c9 s/ s
: U3 M' r7 V2 \7 U* l1 x // This is a simple schedule, with only one action that is
, `- v% L6 u/ E W$ D+ q& R // just repeated every time. See jmousetrap for more8 e+ V, x: w+ u3 V5 q! `5 _3 m
// complicated schedules.
, t, K8 P5 s. M / z" `1 }# |4 o9 l8 j' d
modelSchedule = new ScheduleImpl (getZone (), 1);
. `8 e1 G. {2 b. t0 `# [$ R modelSchedule.at$createAction (0, modelActions);0 J) L* J+ N* a7 O2 H# H. c1 Z
5 i8 a3 p. R. o+ d" S2 @# W
return this;/ W, V& E. N7 e
} |