HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& z7 g! i3 A+ g4 o' C* u" J1 Z+ x! n8 w) W
public Object buildActions () {0 \7 m3 S0 T& u" v- h$ k
super.buildActions();
# v& [1 e5 O$ `1 f" _, H 7 q. \! e7 k6 j
// Create the list of simulation actions. We put these in
' W3 u {. Z# x; ~& W // an action group, because we want these actions to be& x' h( M/ }. L; \9 l4 S; h
// executed in a specific order, but these steps should
* o6 M7 d% E2 W4 a // take no (simulated) time. The M(foo) means "The message
: [5 b+ K$ a' s6 O# o% l // called <foo>". You can send a message To a particular
, |. @( m; P2 j. ` // object, or ForEach object in a collection.2 u5 ^+ n, M' Q: @ U% L% E0 v5 m
6 q3 M3 X8 Y F6 E8 v# w/ A7 ~9 l // Note we update the heatspace in two phases: first run
5 M D b) u7 \5 N6 s! p // diffusion, then run "updateWorld" to actually enact the
" n! `2 S) V% m // changes the heatbugs have made. The ordering here is3 f+ W) i# x+ w; N$ I$ C1 a7 |2 |
// significant!
* O" B: v/ L5 r4 o
2 N9 X. ]' i( D7 e0 D // Note also, that with the additional
x D( H4 |; J: ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ Y3 @! e; m1 F" `5 E% @' N // randomize the order in which the bugs actually run
) `6 W$ g+ n) Z3 l- @( z4 c // their step rule. This has the effect of removing any
0 U/ Z9 k$ F% r // systematic bias in the iteration throught the heatbug
8 h7 l9 N5 ?: p9 ~# F // list from timestep to timestep
* \7 ^. ` d- W3 |5 G7 I3 }& N 9 n" P& p2 E: d# _, q) `
// By default, all `createActionForEach' modelActions have
8 r& X3 T1 h2 j7 [/ Y' p9 @9 N // a default order of `Sequential', which means that the
; {' m" X% Q/ K+ }5 [ // order of iteration through the `heatbugList' will be- j3 q- ?2 |$ D+ j F
// identical (assuming the list order is not changed r, L( ?" V8 C4 b3 W) D
// indirectly by some other process).
% F) S4 U3 C4 L; J; `
- E, s4 q; b. S' q% i modelActions = new ActionGroupImpl (getZone ());
- d) s& |6 o/ D
* j4 v8 s% B( O+ G# k+ o* c R4 K try {
/ e* s6 K: K p _$ P+ R modelActions.createActionTo$message7 S# u, B/ ?. k- }; U7 U
(heat, new Selector (heat.getClass (), "stepRule", false));
+ X) }4 P. ]* ~9 c0 w7 S% q } catch (Exception e) {
% I' u. I- f! E* S r$ ?! l System.err.println ("Exception stepRule: " + e.getMessage ());
6 U, A- K3 r4 b( D3 }6 I }* l1 {" R, t- ^6 g/ q/ m+ f3 B
' f- ?$ U/ D E5 z try {
( h# }1 d9 {6 H/ K# { Heatbug proto = (Heatbug) heatbugList.get (0);- ]' }3 M& j9 t; i7 s3 D& i
Selector sel =
2 V. _2 E% c) k ]% o/ j! T new Selector (proto.getClass (), "heatbugStep", false);
9 p$ S5 G# j& Y. ^" n actionForEach =2 w- u1 ~3 x4 ?
modelActions.createFActionForEachHomogeneous$call C1 W) u8 r! e( y
(heatbugList,, J, o- _' Q6 v7 r4 ]/ t7 F
new FCallImpl (this, proto, sel,# k* x( [% c& {% s7 y4 F& b
new FArgumentsImpl (this, sel)));
, a. u. ^5 C; p2 |. R } catch (Exception e) {) ~+ K+ h. K% p3 ]
e.printStackTrace (System.err);
' F/ d0 V: d7 G3 R/ b }/ |2 ^8 @) s& m& _3 G( `
6 v7 l( d' O+ H0 ?" _
syncUpdateOrder ();
7 `( K- ?) N6 ~ [# y
4 c t$ T+ n& J: l6 f+ ~! c try {: t7 t6 O: i. J: D
modelActions.createActionTo$message
# J3 s1 m% p6 O) e* t* { (heat, new Selector (heat.getClass (), "updateLattice", false));: a/ C3 y; V" x8 T, R2 T! m
} catch (Exception e) {
! Y, x$ | ^, g5 G& n7 J System.err.println("Exception updateLattice: " + e.getMessage ());
2 c/ z' s ~9 |% J }8 C1 j, O r! \5 C; c
0 |: N1 o4 H, d0 Q$ q- s; f // Then we create a schedule that executes the h( C% d& T, h/ |) k% `8 \
// modelActions. modelActions is an ActionGroup, by itself it; q8 O# W0 m; {2 q
// has no notion of time. In order to have it executed in! N2 Y- G& Q3 X- m
// time, we create a Schedule that says to use the
' [. R1 Q# r0 [8 ~. T7 d$ { // modelActions ActionGroup at particular times. This) ?# I- p6 d" e
// schedule has a repeat interval of 1, it will loop every) l& {& q4 w, V" @: P
// time step. The action is executed at time 0 relative to
' D- i) {2 b8 N // the beginning of the loop.
( j6 }4 y7 o0 s. [7 J9 ~3 [) f* S# [( D% u
// This is a simple schedule, with only one action that is
, V X; }& B3 b- e6 j // just repeated every time. See jmousetrap for more. [. v4 M9 z5 z' q/ E( `
// complicated schedules.
) @( p/ K2 f7 ^* P3 j' s
# Y# Z8 F4 t6 F) z ~: U modelSchedule = new ScheduleImpl (getZone (), 1);
- O7 S2 _; s4 y1 D; e; R modelSchedule.at$createAction (0, modelActions);+ s w' C/ ?+ g3 w+ M- T S8 \% ~/ _
, }& J' Q. G5 Y
return this;
) P" g( K% j# d$ o } |