HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 w g% l( M+ X
7 p" Q. S, [2 \1 c8 }& a$ q
public Object buildActions () { [& Q' X6 b' }8 l' F9 N- q
super.buildActions();
2 N0 O: b8 B6 N7 e: H0 K 2 H' D: v& M9 y( @. O$ e- }% \
// Create the list of simulation actions. We put these in$ m3 v' o$ J) ~; @) a# h
// an action group, because we want these actions to be
( V' O, J' v2 t- c // executed in a specific order, but these steps should
3 N6 X+ A3 ~1 I+ P // take no (simulated) time. The M(foo) means "The message9 l5 E+ ~6 i. Z
// called <foo>". You can send a message To a particular
( _1 ]1 S2 m% S) h% C0 Y+ w // object, or ForEach object in a collection.
7 h# c7 C$ ~( X6 I9 O! m
4 _1 |2 l7 y8 c4 J5 O1 _- b // Note we update the heatspace in two phases: first run1 ^, ?" Z2 j/ N0 N( H
// diffusion, then run "updateWorld" to actually enact the
* l( u+ B R Z; x P4 k* t // changes the heatbugs have made. The ordering here is7 H, P! Q* |1 Z# ?- I2 v
// significant!
/ x3 E' j/ n% F6 B5 [; R: E
X3 o7 \' X) H6 I6 F // Note also, that with the additional: n6 ~# n0 v: ~1 S3 q9 d2 L6 T
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# T5 r2 j4 r; F; c // randomize the order in which the bugs actually run
" H+ J2 n$ D) A4 q // their step rule. This has the effect of removing any. C! i. q: q8 Y2 t/ v6 I
// systematic bias in the iteration throught the heatbug
9 e9 R" B& v, ~/ [ // list from timestep to timestep
, V J9 [$ R4 W" E! @$ m
+ j" U) `' X, i6 B* N8 ^5 o // By default, all `createActionForEach' modelActions have2 T7 [. ^2 {$ Q M: _+ T4 {
// a default order of `Sequential', which means that the
8 I4 r. i9 l- m // order of iteration through the `heatbugList' will be
8 h3 Z2 X3 W: s( V& b, y // identical (assuming the list order is not changed {) L1 i8 X4 c9 z1 U
// indirectly by some other process).# W! O$ J4 _6 q. T7 o6 s6 O$ T$ u0 h
; X! H# w# @; J+ o. @
modelActions = new ActionGroupImpl (getZone ());
: p! b2 R7 v H( a8 T
- M0 j4 O8 p' y# p5 i1 J9 u try {
1 ?3 M. ~8 x+ [$ v' ~. U# R) J modelActions.createActionTo$message e8 { ^9 X9 H, C/ M; ~
(heat, new Selector (heat.getClass (), "stepRule", false));
) _+ ~ Y$ u$ y1 P2 Y4 A7 z6 U } catch (Exception e) {) E' h- {) G; D# w3 K* g# A' D
System.err.println ("Exception stepRule: " + e.getMessage ());
6 [' p1 }% e5 h/ ^$ `" X5 [2 l, X }
6 i* d0 O) y: x2 L+ K! J( n+ h9 }% `7 z5 |1 w
try {) l# |8 n5 K7 u4 D( c( K6 X
Heatbug proto = (Heatbug) heatbugList.get (0);
4 ~ o3 }0 m8 m7 ?% I Selector sel = : x7 z8 k! M6 V
new Selector (proto.getClass (), "heatbugStep", false);; L4 I$ _8 R$ }% c1 P2 B+ N/ C
actionForEach =( O5 k) b- u' H# c
modelActions.createFActionForEachHomogeneous$call
1 _ C" r+ ^& V* x! | (heatbugList,
. x: Y, e* @6 B! m5 H& V new FCallImpl (this, proto, sel,8 V' o. u" f' |
new FArgumentsImpl (this, sel)));
# b' K3 T, C1 ?( M" q+ l$ U% H } catch (Exception e) {
9 I5 U' D8 d) j" Y" g, O! [ e.printStackTrace (System.err);
w5 Y! n' Z* b$ B! K% y6 u: y }
+ v$ ~$ d4 R* B; _- X: R 0 h: x6 S2 t+ K9 M/ C
syncUpdateOrder ();
. ~0 t; }! k0 z' d: I& e3 l% b! [6 J7 X1 T( ^5 `
try {
% w6 I7 O- p% c, S/ Q" W: j4 M/ d modelActions.createActionTo$message
5 X6 }) X) R- F- m0 V: [ (heat, new Selector (heat.getClass (), "updateLattice", false));% e8 c4 D7 T/ y4 H
} catch (Exception e) {
6 _' Y) W" [# S) n2 m1 M% }( C6 \ System.err.println("Exception updateLattice: " + e.getMessage ());# ~" M) p% V# W( K$ ^0 K3 F
}2 m4 l' ~. o7 P2 v7 g
6 c, ]) N7 ]- M4 B" A: @& l: V7 v // Then we create a schedule that executes the
0 t( J9 P7 O$ _+ h* a( z // modelActions. modelActions is an ActionGroup, by itself it; e( A" S1 j$ N9 J, j. r& Q
// has no notion of time. In order to have it executed in
V: v- B% m' O) a! R; n; J9 p // time, we create a Schedule that says to use the% j$ h2 N1 D) w3 \: r$ O
// modelActions ActionGroup at particular times. This
' W8 f! t0 O1 W# i2 x- G. R // schedule has a repeat interval of 1, it will loop every2 B2 q3 N4 E. x- s1 D% G" l
// time step. The action is executed at time 0 relative to, T8 a% k! s1 u s6 V
// the beginning of the loop.
( m( T' o0 X$ z u' i5 C1 J4 o2 A* w0 t2 i: R! \- [: {4 g
// This is a simple schedule, with only one action that is4 ~; i, O! g9 [" e: o
// just repeated every time. See jmousetrap for more I. y1 W5 o0 }2 Y) H/ A3 n* o# T
// complicated schedules.9 S7 z' u* F& W, L# L C! {
4 }) [' l/ x8 F: B$ M
modelSchedule = new ScheduleImpl (getZone (), 1);5 w+ b- j ^7 |5 T, ?
modelSchedule.at$createAction (0, modelActions);
; r" `8 G$ Y7 g3 v# |& ? 9 I3 f3 X" Q- n
return this;
~& k) `: y( q2 Y } |