HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) \3 {! E! E" m* ]5 A! P
# l7 U, V, ]2 A- x0 ~( }" P public Object buildActions () {6 G0 c* _9 w N) i" h G6 s5 D5 u
super.buildActions();9 A5 k/ w3 b4 \6 Q1 W+ Y
$ Q& o3 e6 E7 N5 a1 G v // Create the list of simulation actions. We put these in
1 P1 ^% r$ a% x/ x- M0 c // an action group, because we want these actions to be* ^! \" P" _. |7 m: H) f' D
// executed in a specific order, but these steps should
; ^- ^3 U1 O* n s& I1 W // take no (simulated) time. The M(foo) means "The message5 L1 z- ]. o! U. x
// called <foo>". You can send a message To a particular
* q' a) c# M7 y- e( h // object, or ForEach object in a collection.
% I$ ]; n6 ]- |3 D- \ ; S$ q* c3 Y+ t' b* n5 Q
// Note we update the heatspace in two phases: first run
: Z! B1 g+ w+ W // diffusion, then run "updateWorld" to actually enact the
( _. u3 `6 Z: F- `3 w" |5 l // changes the heatbugs have made. The ordering here is. n+ ~2 x/ L9 f) v6 U# Q
// significant!1 _9 U( J, O8 U, [5 _
' F0 I- ~! y' [& }
// Note also, that with the additional& j, x: |9 g# s9 j
// `randomizeHeatbugUpdateOrder' Boolean flag we can
6 m1 e1 Z' o, |! ~1 Z+ A // randomize the order in which the bugs actually run
6 m/ |$ i$ J4 Q: u // their step rule. This has the effect of removing any
/ Y4 R7 x5 J) [ // systematic bias in the iteration throught the heatbug
2 d/ s; A- f$ T" ~. a0 [2 G6 c5 x // list from timestep to timestep
# D3 t" l9 x3 c1 h1 K M! ]9 g: [* [" Y( A- N6 P
// By default, all `createActionForEach' modelActions have Q/ n" n6 o: _9 J
// a default order of `Sequential', which means that the- Z8 A* P* w* W1 Y7 k
// order of iteration through the `heatbugList' will be8 C( p5 G* n; ?' }1 }
// identical (assuming the list order is not changed
5 D" t4 V9 O2 v Z4 z" ~ // indirectly by some other process).$ M# c* f& m, i1 y; k
9 P% Y$ E3 L! q4 S0 _& W modelActions = new ActionGroupImpl (getZone ());
P: z( \- k& V' e' q. F4 X4 k# v/ C4 |
try {2 ~; k& W7 b5 X4 {
modelActions.createActionTo$message0 [0 [3 o8 Y l/ i! `
(heat, new Selector (heat.getClass (), "stepRule", false));; C1 D( y/ t) g3 c/ ] Y
} catch (Exception e) {
: Y! G5 T# h1 i' K' S+ _& a System.err.println ("Exception stepRule: " + e.getMessage ());+ j5 L9 F& _+ P) y
}' ~0 F2 }* ^ g' z
( Y+ c1 E' g: x; {4 j
try {
5 t# B* A9 m' a; |4 P9 T Heatbug proto = (Heatbug) heatbugList.get (0);) Q0 a2 K1 u, d1 e
Selector sel = 8 |) f( Y6 S$ u6 s6 U' |0 N
new Selector (proto.getClass (), "heatbugStep", false);( _4 e0 s. j1 k, F
actionForEach =
/ ]5 x1 K& g& `' P+ [ modelActions.createFActionForEachHomogeneous$call$ }, j( ^4 p: k% T
(heatbugList,
L& C7 d; s1 m new FCallImpl (this, proto, sel,
5 ?! e" F1 U* W; ^, E new FArgumentsImpl (this, sel)));$ Z* d* I7 t' j# ^& _* `! ~
} catch (Exception e) {4 o7 ~' _' v2 H
e.printStackTrace (System.err);. {' y, V9 V+ K" Y
}
2 D$ t, Q! _, Y
3 W. _5 O4 A: v syncUpdateOrder ();- q. { Q* R5 F# M2 ]" f- ]
. q$ p; o8 U9 F) F& ]& `
try {+ u4 Q/ D0 w1 K4 N) N
modelActions.createActionTo$message 1 ? @! c& H: f* F/ o7 \
(heat, new Selector (heat.getClass (), "updateLattice", false));
; r3 k" X0 X% g' q } catch (Exception e) {7 m) D' x" j& S, ]7 }# k
System.err.println("Exception updateLattice: " + e.getMessage ());
& c1 H1 Q9 t' U; }& W- n }
% I' k8 ?. D5 r5 b$ X
; K% M9 ~4 F' m* D Q // Then we create a schedule that executes the% u, ]9 \; f- K
// modelActions. modelActions is an ActionGroup, by itself it
4 d, W- W$ i( V8 M' R // has no notion of time. In order to have it executed in
5 a: m# e2 f9 o$ q% s0 T; h // time, we create a Schedule that says to use the! i% r% o+ j0 J% v
// modelActions ActionGroup at particular times. This
! T; p' i- P* d- G3 U5 w0 I. H // schedule has a repeat interval of 1, it will loop every
7 g `0 s$ k8 h* X# N" ]& ] // time step. The action is executed at time 0 relative to0 C+ Z7 C- h$ b4 ^) I
// the beginning of the loop.# R' n8 F( |3 r# ]& W( P
8 F. I m% {) K* {8 y0 x6 G // This is a simple schedule, with only one action that is
, c, e- ~' T1 M$ l( h d% [ // just repeated every time. See jmousetrap for more/ w' q1 w8 s+ h5 [" R, |/ k
// complicated schedules.
3 c+ h0 R. m+ f8 @& I
3 _5 e" b( |4 X4 I( u4 b( @ modelSchedule = new ScheduleImpl (getZone (), 1);
' U& Y1 l. t2 V p. z modelSchedule.at$createAction (0, modelActions);: y# {! f8 c4 C7 {5 E% y: Q
- s5 m: @ g" R: A4 b" N
return this;/ ~4 }7 T; a* o: Q; e' ~
} |