HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: n6 e5 C' ~4 m) N0 }
! s, N6 J& c) n6 D ^" G! R4 o6 h2 B public Object buildActions () {
) A; g1 [+ u/ o/ A: k) T super.buildActions();
7 Q9 \& ~. D, H% H# M; s ]
1 L3 S% \+ ?* W/ s5 g/ D1 r# ? // Create the list of simulation actions. We put these in# \# u7 m% a x% h
// an action group, because we want these actions to be- G1 z# {% Y- o
// executed in a specific order, but these steps should
, L5 j9 K8 _1 h( b- G6 h" y // take no (simulated) time. The M(foo) means "The message
- g( G1 v b4 a) R( V' f2 l4 Y! f* Z+ m // called <foo>". You can send a message To a particular
2 O0 p) F" V/ L R, b a // object, or ForEach object in a collection.
8 U9 {" H6 x- i 1 Q3 T2 c/ H0 b7 S. Z& P6 n2 t' |+ o
// Note we update the heatspace in two phases: first run
, x: D0 y1 n( c1 ?" H // diffusion, then run "updateWorld" to actually enact the
. ]% s/ r/ L2 z! k# |- @- f+ ^ // changes the heatbugs have made. The ordering here is3 @4 p3 X; I; e4 T' r6 c7 E3 W
// significant!
! y' e5 T; K3 m0 g& C& f' n
7 ]2 H/ a: K: j3 q4 I // Note also, that with the additional, [- p5 \6 q1 [% p9 t
// `randomizeHeatbugUpdateOrder' Boolean flag we can( o( O/ j1 p/ H" O/ A
// randomize the order in which the bugs actually run
6 [# x: N; g. J# Y8 N* n: m4 w1 J // their step rule. This has the effect of removing any ~8 P) ^ y( N3 c( H: S
// systematic bias in the iteration throught the heatbug! c' m0 C8 M) e! A& J0 V" R
// list from timestep to timestep) }7 X; R$ J5 b4 ^2 r; z
3 z' b0 Y% h# x: @5 J6 c1 g, K0 @
// By default, all `createActionForEach' modelActions have( W c( Z" |! U# W. J
// a default order of `Sequential', which means that the. u& C: N7 m6 _+ J1 _$ f" B
// order of iteration through the `heatbugList' will be6 a. J, m9 r* @
// identical (assuming the list order is not changed6 C5 {4 D8 T5 s/ Q- i3 Z
// indirectly by some other process).
0 [0 \4 Z+ T3 w8 V( m3 B; p! l
' c4 b8 {4 w: Y* O6 G* ]3 c modelActions = new ActionGroupImpl (getZone ());
1 i1 E6 b" j9 C9 H6 h7 q5 Z. E$ X3 g; v1 L
try {
/ n4 E/ L3 R. g" A modelActions.createActionTo$message
+ O* ?% Q. L. B }( S/ x (heat, new Selector (heat.getClass (), "stepRule", false));
6 ?3 L# ^* b- |! [! ` } catch (Exception e) {
: h5 N7 E9 q, ?$ v n System.err.println ("Exception stepRule: " + e.getMessage ());
5 M# |- w" |" a" h, z }
" I3 f4 M3 e% x l
O. p) m B9 E9 w! m try {
+ V: T- g* _; U t) e Heatbug proto = (Heatbug) heatbugList.get (0);6 Z- n. E! r4 j
Selector sel =
' R6 Q- @) v; j5 o8 x new Selector (proto.getClass (), "heatbugStep", false);, r8 ~( ?. x( J4 u9 l
actionForEach =6 Y1 b, u$ n" L/ d
modelActions.createFActionForEachHomogeneous$call
0 _0 A- p# |' J% W; R; M' w f (heatbugList,$ D: n Q U! z: s# C
new FCallImpl (this, proto, sel,
( ]4 l6 ~1 g; g; \; m( T+ a2 o new FArgumentsImpl (this, sel)));
8 D8 d9 z7 `7 ]7 M } catch (Exception e) {9 R+ _! e X: P
e.printStackTrace (System.err);
. p/ R7 E% I' ?9 g; ] }
0 Y: c1 U3 _1 B' a: [6 j o2 O 5 s- u, p6 L6 O) w
syncUpdateOrder ();
6 N- R3 i0 n. }, c) A
- h# l, j0 C0 M$ n, p try {
1 K8 Q4 J: I0 l- g1 d' [( K) \& y modelActions.createActionTo$message
: k3 J- t6 X" B4 B! H (heat, new Selector (heat.getClass (), "updateLattice", false));: V4 a) [! [( \
} catch (Exception e) {
) C/ Y p6 q" [ System.err.println("Exception updateLattice: " + e.getMessage ());
2 b; X) V; p' i" s! v3 b }+ q/ @2 p) Y$ m) X; W7 V
2 o" N% f; p( j! J( O9 z. D // Then we create a schedule that executes the
) q, S! ]; f h8 x/ ?$ C // modelActions. modelActions is an ActionGroup, by itself it
R9 H# D5 a8 f( M" k0 h' D // has no notion of time. In order to have it executed in
: `5 n2 a: Y2 ?8 F // time, we create a Schedule that says to use the0 f7 L# R1 S$ F3 ]- g4 e
// modelActions ActionGroup at particular times. This5 h" \4 u x5 U. K
// schedule has a repeat interval of 1, it will loop every/ S' C; k( Y; G# p
// time step. The action is executed at time 0 relative to; y' G7 ~) [& B
// the beginning of the loop.
( K6 c r3 m2 G9 @) Q! i
9 L, u! |- Q* ?( Z5 z& T T // This is a simple schedule, with only one action that is
, w9 h3 A* j. G1 m, j, k // just repeated every time. See jmousetrap for more
: P& ?5 f5 L3 A, r. X0 u // complicated schedules. ^/ a6 i# {: O; v
" ]) d' M* H( r; a8 T8 {& O4 B( c# K
modelSchedule = new ScheduleImpl (getZone (), 1);9 W( z! `& w6 K& \! `+ J0 F
modelSchedule.at$createAction (0, modelActions);
* p/ h, c0 U$ q7 _8 { ' q1 v$ l7 o$ M& k
return this;. o) b* a* T! }( d1 j
} |