HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& V( }4 A/ S# m, r/ ]% U* T! I; t; V- [2 Q9 r$ Z
public Object buildActions () {0 |/ V! c, ^. _# A* N6 E
super.buildActions();7 F4 i( V2 ]: B+ d0 W
6 V, Y- D$ n) R& x6 z- h, g // Create the list of simulation actions. We put these in
% o! y. K3 s9 F // an action group, because we want these actions to be; F- {3 }+ k) ]( X$ l/ _
// executed in a specific order, but these steps should
% b: q) d7 ?: g& J9 o4 Q; W // take no (simulated) time. The M(foo) means "The message! K5 C4 j0 g: E, R/ ?+ X8 A
// called <foo>". You can send a message To a particular. ?* ^. {: f% Y) d: _# P* w
// object, or ForEach object in a collection.
9 L# E! I7 Y. j. a
5 f2 Y9 c$ j3 B6 E$ e0 s! Q# ]3 g // Note we update the heatspace in two phases: first run
: u. R/ O! m$ w9 h) i // diffusion, then run "updateWorld" to actually enact the& ]9 [) O F" n; a% \6 [3 p6 A
// changes the heatbugs have made. The ordering here is
8 E' x. o) H( u) F; J' y$ Z // significant!
! F% ?0 o1 E! D, c1 b$ |
; c6 p$ Z# C3 _: o: y // Note also, that with the additional
. R- l- H" q* Q1 r! F' z) _ // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 c$ T- G, ]2 G // randomize the order in which the bugs actually run- p1 u* I6 \9 e- |) Q
// their step rule. This has the effect of removing any
5 ?% ]$ g3 j! ^. h+ j/ W% @ // systematic bias in the iteration throught the heatbug
+ R2 p1 w- W8 K- Y, M) K // list from timestep to timestep
! @2 n8 v! C! F- A% w% c
! D+ c. t% \( F9 ^- } d // By default, all `createActionForEach' modelActions have
: r& Y" ]/ t2 f# X' W // a default order of `Sequential', which means that the
! R+ R' m, [: R% m // order of iteration through the `heatbugList' will be
9 x; M- w5 c% B, g // identical (assuming the list order is not changed
4 y; X# h" M7 {. W0 \+ k // indirectly by some other process).
. \# N$ ` R7 }! j' V; s: D / u6 q0 e4 c, p$ l
modelActions = new ActionGroupImpl (getZone ());
2 Z6 o8 J3 ]' P- Z B4 J1 X f) ]7 D3 U6 r' I+ Z
try {
: t7 R$ G* U) J0 y* t G modelActions.createActionTo$message1 r8 n; e* I" A' s3 M# k5 v
(heat, new Selector (heat.getClass (), "stepRule", false));
. v% j* k3 K5 ]4 n7 \ } catch (Exception e) {
1 R. r0 B+ k* F System.err.println ("Exception stepRule: " + e.getMessage ());6 @8 ?1 T: ~5 H* d8 c% J
}4 `5 H) g0 N. B2 P1 S1 |2 K
( t, \' i- s% z try {
* k7 y% o8 p" a2 f Heatbug proto = (Heatbug) heatbugList.get (0);/ C8 E- t5 ?. z4 v/ c6 m& h; s* P7 e
Selector sel = ) t$ M, k6 p1 v
new Selector (proto.getClass (), "heatbugStep", false);5 v j/ _9 y# I. F$ n1 y3 \7 V1 F
actionForEach =
+ p- V$ S, e- \ modelActions.createFActionForEachHomogeneous$call
' Z( s* {2 w3 j3 s0 `$ _ (heatbugList,8 O; M# F+ ?. j4 ~
new FCallImpl (this, proto, sel,4 l9 R' I* f0 Y; V* L# t; o- w
new FArgumentsImpl (this, sel)));
. T/ m q$ Q { {* n7 y } catch (Exception e) {6 v8 u2 r$ s* l$ h* A
e.printStackTrace (System.err);
, d4 ~) P* z; K$ g |' f \ }7 R9 a& p* M% k7 y O
% \( s8 N; M: [# l" }
syncUpdateOrder ();
3 }/ u* R+ w$ A, G
Q. g- n N7 x2 g try {$ k2 ?1 I0 t$ H0 J9 H- O
modelActions.createActionTo$message
g; V/ J4 F. |+ F4 ?$ R/ ] (heat, new Selector (heat.getClass (), "updateLattice", false));% d6 s/ J- @1 U s
} catch (Exception e) {
5 n2 b, l, k' @; e) K6 |( @ System.err.println("Exception updateLattice: " + e.getMessage ());
% e& B$ q5 {' p0 e) {! } }
+ d3 R& i+ ?" M/ s/ Q
% R4 G* c6 u) c% x i. @ // Then we create a schedule that executes the- w( G& [2 R& N! f
// modelActions. modelActions is an ActionGroup, by itself it
; A) h; f& v/ j# E) L ]+ d! _: G // has no notion of time. In order to have it executed in
]/ v3 p; J5 n // time, we create a Schedule that says to use the
- p# T$ @8 m7 w% }2 d. X // modelActions ActionGroup at particular times. This
6 L8 u+ A8 ^, d' \, p& f/ G% K // schedule has a repeat interval of 1, it will loop every
+ k( B/ A) [. T/ W; b, G" Y // time step. The action is executed at time 0 relative to
}; q J# w% B7 I // the beginning of the loop.% n& w7 x E) _
8 _: G! k) t6 O M9 @! @4 `
// This is a simple schedule, with only one action that is
' ]1 t+ r' E+ D4 h4 j4 |1 o: `2 s // just repeated every time. See jmousetrap for more6 `3 Q/ x8 H: a$ ^
// complicated schedules.
; W5 I2 E u* d! @8 J: y! Q . a/ G3 H$ Y9 U: K+ M, f
modelSchedule = new ScheduleImpl (getZone (), 1);$ D/ }; }+ y3 q1 z2 Z
modelSchedule.at$createAction (0, modelActions);' ~- j5 D: q. V8 Z$ _. a/ S" F& q% Y
/ i: i: M! B, W1 J# _
return this;8 U' |. g( g+ u/ M: G# B7 y z
} |