HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* F8 H' r6 @7 c/ ]. u% u- `7 c0 }9 }2 F% f4 @1 X. B0 `+ E
public Object buildActions () {" g# Y8 m( q$ J- f
super.buildActions();
1 H3 E* ^1 \( g 6 S3 C5 o) K; e n ?
// Create the list of simulation actions. We put these in0 v% b0 a+ ?+ w+ }/ }. t
// an action group, because we want these actions to be, C/ \' b0 w! B$ q% V! z
// executed in a specific order, but these steps should
$ Y D& E x9 F+ z5 k" K5 i% ` // take no (simulated) time. The M(foo) means "The message, I5 ]: ]# c+ [9 k3 ]
// called <foo>". You can send a message To a particular
7 O) D; E, {2 ?+ ~ D, c // object, or ForEach object in a collection.
/ ], m; P5 u3 q) a0 Q: x2 |
6 C) M1 C. M1 d6 T5 d // Note we update the heatspace in two phases: first run
+ O* y# w* S" f* O6 ?" a // diffusion, then run "updateWorld" to actually enact the. T0 _+ H2 h/ x9 ^; }# @, {
// changes the heatbugs have made. The ordering here is
$ G! i9 u0 ]' V // significant!" z1 ?: G) x; y$ K
$ s! @" [2 |, L& R! x F, ^
// Note also, that with the additional( v d( n1 o1 r( W! n: ~6 {# m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, ^# R2 V+ m% t" i // randomize the order in which the bugs actually run
7 s; Z4 f9 r% W- l7 R0 T // their step rule. This has the effect of removing any$ |9 D' r- C& o5 o/ J
// systematic bias in the iteration throught the heatbug
8 a2 w3 L) B. E q9 y // list from timestep to timestep
, C2 p, w9 S. t$ O- G
9 Z+ N2 z) M* j // By default, all `createActionForEach' modelActions have5 z* ?1 R) [9 Y+ Z! o7 i) w
// a default order of `Sequential', which means that the
5 |) f4 `8 ]* S$ M Q' s: z) E1 K2 F // order of iteration through the `heatbugList' will be
: t- q% @2 H2 l9 q // identical (assuming the list order is not changed, L0 o) t% d- L
// indirectly by some other process).4 a3 C$ p( R, _1 d5 e: s$ ^
3 d" }' Z+ P& X5 D: L; Z8 W/ v9 O modelActions = new ActionGroupImpl (getZone ());
4 x8 |, |4 r& Y$ I
+ R) f8 k' c6 o' R try {; e: {) r) {; W, E9 W
modelActions.createActionTo$message
) ^: N2 f) Z u$ @# }, _4 ^2 D6 t (heat, new Selector (heat.getClass (), "stepRule", false));
! O8 G9 O _) @: ^ } catch (Exception e) {% d. W# T- j7 a, l$ x8 k3 c6 e) h
System.err.println ("Exception stepRule: " + e.getMessage ());( y7 t. z& G2 u1 C0 o! |
}
' D8 g( V& F% J7 U8 I% }. W, `; r1 c" f$ y2 B% m
try {
. \3 v& ]% s. _8 v* y. X# E Heatbug proto = (Heatbug) heatbugList.get (0);9 S8 w7 B. T, f( e7 d, }
Selector sel =
& L2 B2 F6 o, \) x1 d3 @# g! [; p1 T new Selector (proto.getClass (), "heatbugStep", false);
& h( L; E& C9 r$ s$ Q' [% v& T actionForEach =/ d0 G, s" c$ P% c) V
modelActions.createFActionForEachHomogeneous$call3 I: @' |& o; |: f
(heatbugList,
. T3 w* W9 Y" Q/ G( P2 V% C# I3 J' a new FCallImpl (this, proto, sel,
2 y8 J/ t. v5 H7 z9 p5 s. @6 D4 Q) H new FArgumentsImpl (this, sel)));, V" E/ i- ?8 O* n/ Q; N
} catch (Exception e) {
0 o& {& ^) x: o" Z7 R4 g- Q' C e.printStackTrace (System.err);: ]& L2 n3 w2 I/ h& {* p& E8 @
}
2 Y" [+ a# I4 f' q4 _ , j2 D% I& [3 ?) c7 a, a2 o( R j
syncUpdateOrder ();
1 W- I4 b7 K# s$ ^: ?& O# e/ l: X
try {
0 L3 ]7 Q0 X! Q modelActions.createActionTo$message
4 Z% X( B+ I7 U' L+ X (heat, new Selector (heat.getClass (), "updateLattice", false));+ O Z8 ]+ ?# E
} catch (Exception e) {
; x! J$ b7 i2 y; u System.err.println("Exception updateLattice: " + e.getMessage ());* Z" [5 z3 m6 q6 j' h( s
}: L6 K7 B1 q8 a" w2 F9 Y# F7 Q
) R4 s/ }6 H. {" s- C) t
// Then we create a schedule that executes the
' k% x8 v% B! ?8 V0 F // modelActions. modelActions is an ActionGroup, by itself it
7 V6 o: x$ I: L# N- [4 p2 Z // has no notion of time. In order to have it executed in
- L! O2 R: g& \* Y e; T // time, we create a Schedule that says to use the( H- ~" P3 E6 b9 \
// modelActions ActionGroup at particular times. This- m& {8 E6 R+ O" h
// schedule has a repeat interval of 1, it will loop every
8 F7 L6 T, J! p/ H4 H% @* A // time step. The action is executed at time 0 relative to9 |$ i, h* C" z9 y5 m* A
// the beginning of the loop.
0 n" p: T) L9 v4 I4 c" w7 j. D
// This is a simple schedule, with only one action that is
$ j* X! Z" N% p K% n" |# @ // just repeated every time. See jmousetrap for more f! b$ x2 _% N; \
// complicated schedules." u7 P& k+ O U0 z
6 X& i9 J \: x& P6 q
modelSchedule = new ScheduleImpl (getZone (), 1);- t8 z' r) q5 |: {' P! e
modelSchedule.at$createAction (0, modelActions);
5 \4 j! ?5 b. N! s; H# u
: w$ D$ F& L$ Y) \3 V( H( e return this;
6 s* P- A: [# s2 `+ Z% h* Y7 J } |