HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 G1 @$ c. Q! g9 |; p
$ ~0 V0 q G( d: w7 w2 Y: x# t! I public Object buildActions () {. K: R* H4 P6 z. _- p- `
super.buildActions();
, T' c8 ^* F) @6 N/ X0 H
' M/ S6 p( T# Z6 H // Create the list of simulation actions. We put these in- L8 v% ?! w+ V8 v7 n
// an action group, because we want these actions to be
, _, J* X& d9 w$ H // executed in a specific order, but these steps should
' X6 d; L1 s6 Q( f$ Y // take no (simulated) time. The M(foo) means "The message
I' n) ^2 n9 C, _0 y6 w3 I5 D* J // called <foo>". You can send a message To a particular
Q% p. U; l' V3 R* p // object, or ForEach object in a collection.
, u J/ r4 s" o9 J _. R
5 H! ^: @" b6 ^ // Note we update the heatspace in two phases: first run
3 N4 k* n7 {, F' [. c // diffusion, then run "updateWorld" to actually enact the
% i- H! m: A2 ?; S: V6 l // changes the heatbugs have made. The ordering here is
& L, G" `7 |1 l( G( w // significant!
' U. {; m9 _0 Y2 |7 b/ E
& R* \1 ]' [; G1 h2 l5 t // Note also, that with the additional
7 W: P& F- W" C/ i // `randomizeHeatbugUpdateOrder' Boolean flag we can( L( c" u+ ?/ _! Z& u, F
// randomize the order in which the bugs actually run
+ A; _+ B+ Y0 {( C6 g/ J+ \ // their step rule. This has the effect of removing any! j" b" ^* n* E }/ I
// systematic bias in the iteration throught the heatbug
* ?3 W- g2 u5 j( A( r9 G // list from timestep to timestep7 N+ x/ c8 T: L6 z- D
* \8 V) q) h; G$ [% k // By default, all `createActionForEach' modelActions have5 B4 |2 C, p$ j' O
// a default order of `Sequential', which means that the- ?6 u) i; X# k* L4 @! F N/ ^! p
// order of iteration through the `heatbugList' will be
4 S8 |5 R9 y% Y- p s% K/ ]2 X // identical (assuming the list order is not changed
$ ~* F8 u0 r" U& g // indirectly by some other process).
8 A# b" K/ z; K0 x1 r% \3 E8 [ # l4 Q" ^5 \' B) D3 r, [+ C% `& Z
modelActions = new ActionGroupImpl (getZone ());7 C7 b6 g/ L: T3 ]) A7 B
: Z6 c8 L7 Z& M, h- S$ I ~
try {8 J5 E, q3 Q% i% `; D2 r! V0 f
modelActions.createActionTo$message
% [3 N9 i- @$ n: N* u (heat, new Selector (heat.getClass (), "stepRule", false));5 ] O) N& b' W% {2 p! |
} catch (Exception e) {
! K+ X f5 Q* l- n System.err.println ("Exception stepRule: " + e.getMessage ());
. @# ]0 p" `: e% Q. ~! R) u }8 c& B# R% Z; @
7 {4 X( P4 S7 i/ e
try {
, }2 S" M9 o, @+ }) p1 P Heatbug proto = (Heatbug) heatbugList.get (0);6 P9 Y& o3 q0 N7 T, v- ^! Y! W% J& d
Selector sel =
, T* w1 P' B) Y& S& X new Selector (proto.getClass (), "heatbugStep", false);
9 K# H* ]2 |& X% u0 E actionForEach =7 V- `, p2 v3 ~) l6 T
modelActions.createFActionForEachHomogeneous$call8 {4 k. W1 E* f. D$ M( ?) f
(heatbugList,
: D: X) y9 X( Z0 @4 u7 s4 X new FCallImpl (this, proto, sel," t2 v. j+ g- C0 [$ W
new FArgumentsImpl (this, sel)));$ x) }8 { M! D: M/ K- o/ k
} catch (Exception e) {8 ]" T" u1 Z9 Z5 O& l, O
e.printStackTrace (System.err);
1 p6 |: R. V6 ~" V/ Z1 E }
8 y: y3 e# T/ F- I
5 Z) @# o2 W" K syncUpdateOrder ();* r M( q7 j6 q. X* A
6 g) Z) j/ }0 A- t( Z1 e! [ try {; ^7 @' H' g' N8 I
modelActions.createActionTo$message
. G$ P9 R! R4 a" L (heat, new Selector (heat.getClass (), "updateLattice", false));
8 w2 w7 \2 u8 ]' y3 n+ c } catch (Exception e) { [2 `6 b$ x ^- z
System.err.println("Exception updateLattice: " + e.getMessage ());
4 |# z0 P. M! i R/ o }
% ^" [8 I* @3 `2 d; B
1 B1 s) y6 j4 {0 a$ Z // Then we create a schedule that executes the7 w' o r+ l! i* J% `& R1 n
// modelActions. modelActions is an ActionGroup, by itself it
( h% m) C. Z4 N" ] // has no notion of time. In order to have it executed in
4 a3 S, z3 ^$ w // time, we create a Schedule that says to use the
9 |2 b" k% _9 d; a4 q // modelActions ActionGroup at particular times. This
+ P* F+ `" f2 W% R" N // schedule has a repeat interval of 1, it will loop every9 H! U8 ?0 F0 r6 Z
// time step. The action is executed at time 0 relative to D4 f: F1 Q6 `! p" G! J
// the beginning of the loop.5 O: u1 f3 |/ \0 ]
" k+ ?# @$ R! ^; ]
// This is a simple schedule, with only one action that is
: k7 t9 ?6 b7 A# [; i& r // just repeated every time. See jmousetrap for more
4 Q- G' R$ C* g/ w% `9 [0 B- p // complicated schedules.7 D! V" b6 `' O, T' R
3 J# t+ | ~1 t9 a. w s x& Z1 h0 z modelSchedule = new ScheduleImpl (getZone (), 1);! N/ k/ R8 k6 _5 B( [
modelSchedule.at$createAction (0, modelActions);/ [; ]/ L. O; H. h* A, K
( V! K* l" k% K1 l
return this;2 I8 c* q3 l, D: I: A0 m) I
} |