HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: E* y2 c, z( G; f0 H% N7 g
( F8 V; S3 L8 g: `+ Y* Z/ _4 W ]# ^2 w
public Object buildActions () {2 E5 e( j3 v9 U9 J1 F
super.buildActions();( z! M$ x% z2 T& U d! H( c" P
2 F6 J' Z m0 ?7 Y7 z& Q$ @' g
// Create the list of simulation actions. We put these in
2 r+ l% t n! a3 U: x7 [1 H& m+ t9 | // an action group, because we want these actions to be, p* X% m! c$ z! _9 u" ` L
// executed in a specific order, but these steps should
* E0 Q/ |& O; q- o // take no (simulated) time. The M(foo) means "The message. ]7 n% z9 h$ h; v
// called <foo>". You can send a message To a particular
/ Q a9 V% ^: z. J // object, or ForEach object in a collection.
0 D- j4 q; ?& N9 }
* e, z0 A' p6 W" g6 V3 F9 A* J( B // Note we update the heatspace in two phases: first run
- k8 I1 u0 K. Z/ y K' | // diffusion, then run "updateWorld" to actually enact the0 G+ [' y1 U1 ]( d
// changes the heatbugs have made. The ordering here is% L' L- N, C+ L" O
// significant!( h4 i) ?( s& q9 m! S0 T
6 F, [9 t* V' H% ?. }0 x+ q7 R // Note also, that with the additional! {' I0 g: k% ]0 J; B
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ W$ E5 L" g' J" r3 r2 v, c0 [5 n // randomize the order in which the bugs actually run
8 ]$ b6 Q2 N+ s- p: J // their step rule. This has the effect of removing any
; h7 Q5 }+ `/ l: a- ?8 x // systematic bias in the iteration throught the heatbug( X0 B/ s5 \# g! _1 l
// list from timestep to timestep
9 t2 w9 r7 ^2 X
( l6 k4 m% S6 E# n0 m8 U5 q; [ // By default, all `createActionForEach' modelActions have
( F j, Z0 E8 h) r9 o // a default order of `Sequential', which means that the; y1 Z x% M/ u/ m P. t ]' q' X
// order of iteration through the `heatbugList' will be
' z' K8 E) Y& @; G1 G8 E3 Q% S // identical (assuming the list order is not changed: \+ |. V8 r/ ~) G" ~! \3 J
// indirectly by some other process).
# ^0 Z) o( o& c% R+ E! J/ S 9 c* _2 ]- W2 g, h3 q
modelActions = new ActionGroupImpl (getZone ());
' Y0 ~% A! `8 q' b
% b4 S0 ?3 G9 \5 _) u try {
* i) Z( M/ f9 r9 l# I4 i modelActions.createActionTo$message2 K+ a9 A2 M% t$ _' E4 |/ s
(heat, new Selector (heat.getClass (), "stepRule", false));8 F; G) Z% G- b. Z
} catch (Exception e) {
- v% d/ i, V2 n& { System.err.println ("Exception stepRule: " + e.getMessage ());
7 r1 f% |; B2 u- i- T% V }
- t8 p2 Q0 B2 f$ j/ X
# Y1 U$ _7 Y' o. m# n6 b6 U$ z try {
9 \+ Q( \5 h) @$ {, Z8 @3 ^ j+ K- I Heatbug proto = (Heatbug) heatbugList.get (0);
8 M& o8 Y' y7 d/ D5 s( L Selector sel = : T/ y/ S6 n8 q8 K% @
new Selector (proto.getClass (), "heatbugStep", false);- c+ D/ F; G: k! t3 \
actionForEach =
8 B7 `) k& ~* [6 d modelActions.createFActionForEachHomogeneous$call5 b, _/ t! q/ B
(heatbugList,
: y% w/ J I8 w/ f( ?- g new FCallImpl (this, proto, sel,
3 W: _" _! y" } v& O new FArgumentsImpl (this, sel)));) ?: Z1 Y, T+ |% S5 j& s8 O% R
} catch (Exception e) {5 f" Z+ d# z5 x: z) W6 O
e.printStackTrace (System.err); k' I) }( |0 b" F+ L
}
0 ]+ W+ K/ ?" l4 d1 b, h6 ^ $ R j5 x8 t" P* K& |. i
syncUpdateOrder ();, A7 c# D# k k$ ~1 o V
- G, y+ B. V0 G, ]3 q
try {6 z9 e% l! p, R) x& m
modelActions.createActionTo$message 9 _& e! l& C U/ k3 m
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ \: P2 k, @- n# e/ o1 m; ]3 T" Y } catch (Exception e) {
" R# T( S$ N9 V" ^ System.err.println("Exception updateLattice: " + e.getMessage ());1 p% ^% ]/ t8 o
}
1 f$ v' ]7 }/ j6 N 6 `$ }; `0 u. Q
// Then we create a schedule that executes the
% t( D7 Y* X" i* C0 w. {- G4 u6 z // modelActions. modelActions is an ActionGroup, by itself it6 N- n3 S, `" S5 B& f
// has no notion of time. In order to have it executed in
4 A6 e6 q' v; n( o$ d9 R [1 z // time, we create a Schedule that says to use the+ w$ o n2 x E! W4 r% U
// modelActions ActionGroup at particular times. This
5 {% K) f: j% k# Q3 S( }. l // schedule has a repeat interval of 1, it will loop every9 ?; k9 i4 M5 b. _
// time step. The action is executed at time 0 relative to
. ~' ~4 H" y, X- p& X0 B; U2 Q6 u // the beginning of the loop.8 {0 C* p& m5 Q+ d2 O7 M& G
; m+ g0 @* R! I! v0 c" u1 J) W // This is a simple schedule, with only one action that is
. Y+ K$ R+ q" T* ?; v" y1 g // just repeated every time. See jmousetrap for more4 B! n1 F: t7 M2 r% S2 i) G
// complicated schedules.& {8 \" x1 ?9 X6 j3 e7 V
1 ^' V7 @/ _& R7 p$ z& |# _
modelSchedule = new ScheduleImpl (getZone (), 1);$ S' P' q6 y7 q$ H- ?+ R
modelSchedule.at$createAction (0, modelActions);
. E$ f, O# i) G
( L! r# G8 S6 m0 V5 b. F7 E return this;
) M+ [: U" x$ |' R! q- d } |