HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 _3 [0 n" }# o) F
/ u7 d" L3 z2 a8 A3 X) h public Object buildActions () {$ d2 _! P' L9 d9 Q
super.buildActions();1 B3 P% E. Z) F% u* k: t& x
" j! e8 p$ b+ m) a% f! H6 H // Create the list of simulation actions. We put these in
% D+ d4 Q" E3 W1 Z+ p; k // an action group, because we want these actions to be4 q7 F# j! C: W+ Z$ V% F4 W
// executed in a specific order, but these steps should1 h3 p9 G$ a* j5 o5 ^
// take no (simulated) time. The M(foo) means "The message/ U! P. x" s* h# ^. L& f
// called <foo>". You can send a message To a particular
- j) Z/ ]% K2 i# ?8 s# D3 \+ j // object, or ForEach object in a collection.
2 N# @7 H o- W. J# q/ U2 C1 ^) Q ! q! Z. K8 b0 N( U% W
// Note we update the heatspace in two phases: first run2 t' p6 c! L6 b$ Y3 e
// diffusion, then run "updateWorld" to actually enact the1 L; v: Q( |6 l9 z K1 ^
// changes the heatbugs have made. The ordering here is
, `6 u# T s- `" _ // significant!
* j- F) P$ o8 H9 c 0 P* a6 ?1 Y0 p4 j
// Note also, that with the additional
2 @+ c* w- `$ e // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ M2 Y1 w9 K9 L, y8 w7 Q0 `- H // randomize the order in which the bugs actually run* {6 j: Y3 X; Z3 z" ^/ p' c8 t
// their step rule. This has the effect of removing any
D2 @7 x7 M/ o9 O // systematic bias in the iteration throught the heatbug/ e7 w5 e4 Y! C7 A7 i+ B% K2 g
// list from timestep to timestep
, e9 W$ ]1 r5 ^5 R0 U# ~
& ~0 y( }" j+ E/ K" K // By default, all `createActionForEach' modelActions have! C$ b' W$ W( p( L/ f5 ^2 q
// a default order of `Sequential', which means that the
: q0 \: y3 ]% ^' L // order of iteration through the `heatbugList' will be, Q, A% P! n8 H4 |! x- L2 ` O6 u* j, l
// identical (assuming the list order is not changed
8 X& @$ M1 I$ A' T) L7 @ // indirectly by some other process).
8 V6 {- |4 e& H! c/ |7 X* S. w0 r8 O 1 y% j+ w8 r1 d: Q" k9 `" J
modelActions = new ActionGroupImpl (getZone ());6 g; i& V! [0 W
0 b( I( Y6 p: |/ \$ U try {& |. Q+ h. d+ M2 ^9 Q
modelActions.createActionTo$message2 U" D L! C0 d- y% K& v% X
(heat, new Selector (heat.getClass (), "stepRule", false));
" D" D% _8 @3 f. D8 j } catch (Exception e) {- a$ ^/ @7 T2 ^5 X5 \9 m6 [' T: m
System.err.println ("Exception stepRule: " + e.getMessage ());6 ^) N6 I+ w3 k1 ^& [) B3 Q( {
}
- c" O Y8 a6 J2 b1 m' Y8 i7 G/ H! c) h0 {7 \
try {
3 g1 z5 `- ?& z* y4 _) F. K+ B Heatbug proto = (Heatbug) heatbugList.get (0);9 O$ |" W" g; d J
Selector sel = - c E0 ~( W3 P3 H1 C
new Selector (proto.getClass (), "heatbugStep", false);5 a2 r4 B" e/ [! ?5 m8 r
actionForEach =+ w! \/ {' v& o/ [$ N/ I$ ~
modelActions.createFActionForEachHomogeneous$call0 J7 I% T5 {; Q$ ], F+ ~6 a
(heatbugList,
! ^. r* l- T8 n new FCallImpl (this, proto, sel,
' q0 P3 }4 A* ^2 {. D new FArgumentsImpl (this, sel)));
& q. ]$ O" o/ o$ S3 b } catch (Exception e) {
# p! K+ D* Q) {6 a& ~" V3 p e.printStackTrace (System.err);
, w( h6 _( O! X. E f }/ W* ]% J8 F I8 ?! Z5 y: j6 I
- U5 Z5 x& w% a- U# w+ V syncUpdateOrder ();- R) P, q% ?1 h/ Q7 d% `
1 @& a6 }$ S: j try {
8 r7 U! I7 y) n5 h) s modelActions.createActionTo$message
; \8 E8 y( x" ? (heat, new Selector (heat.getClass (), "updateLattice", false));
3 C. @5 Q3 x' l& p } catch (Exception e) {
+ D+ \6 U" D% i7 T! V# q System.err.println("Exception updateLattice: " + e.getMessage ());5 c8 g- {' A& z0 n" t
}
9 Y% s5 q$ G5 N6 R A ! q0 P) W1 l1 e: i; Z
// Then we create a schedule that executes the
* b: j7 d9 f) m$ ^ // modelActions. modelActions is an ActionGroup, by itself it9 v N% B8 w/ e/ C* m
// has no notion of time. In order to have it executed in
1 f( j, X, I K X // time, we create a Schedule that says to use the
* D% M" j" X" u3 o9 ]+ b, w5 ^ // modelActions ActionGroup at particular times. This
- ]6 B7 D7 M% \, O: B% } // schedule has a repeat interval of 1, it will loop every
/ V* w, g* `6 L$ z8 p // time step. The action is executed at time 0 relative to
6 x2 E. J" W3 G, Q, N0 W5 o // the beginning of the loop.
# o; S7 ^/ ]) o {2 C: v, r! y- Y. j: x$ q j0 ]/ b# n% O
// This is a simple schedule, with only one action that is1 V; T" f& U. Q2 v$ g m
// just repeated every time. See jmousetrap for more1 e9 B% O# `- u! Y. F3 S/ t
// complicated schedules.
- @/ a# R) z/ l: ]" L; T
* E3 k9 d8 N' Y2 O modelSchedule = new ScheduleImpl (getZone (), 1); {# w c% @2 G2 P% }$ S7 b7 r7 m
modelSchedule.at$createAction (0, modelActions);
9 z9 o! u' w3 }, p5 H. [ 1 R7 ^9 c5 S8 X& j) t' ^6 b
return this;! B: _" n! m; O2 d s6 c
} |