HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% s8 |& Z/ N: m. [1 U4 H& }6 Q& x% ^3 T9 h/ I
public Object buildActions () {- Q$ i% f# }3 _( c9 d: v- ], {1 B
super.buildActions();
: }' r! }$ J) @5 Q4 r4 j- U+ C * q2 L8 Z" s. p; W9 c. S# q" F
// Create the list of simulation actions. We put these in2 h' O* I3 |* P& t
// an action group, because we want these actions to be
0 q7 f" v$ q- f8 J8 R P3 K // executed in a specific order, but these steps should% ?8 a, R0 b5 V+ Q" Y# v i; N( b
// take no (simulated) time. The M(foo) means "The message5 t# t. d# y/ z+ z/ ]
// called <foo>". You can send a message To a particular
" `" z; C- o# Y8 Y // object, or ForEach object in a collection.
) V% M! P1 y. H- P; u& C
* s' _+ \, s( P3 c7 p& u# T6 h // Note we update the heatspace in two phases: first run
: m: f; o6 }7 I% d4 i3 Q9 @2 n5 ] // diffusion, then run "updateWorld" to actually enact the
1 m. B, S' T5 T; u5 Q // changes the heatbugs have made. The ordering here is
( i' U- F8 j& P5 S- V, A6 t( o // significant!5 j" a8 l* c2 p9 z# b" x2 k( x
, X. a9 u6 ?; D! ]8 E // Note also, that with the additional+ x2 A% @/ G7 q; I$ z# v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 d( ?: d$ o4 @; W# p% k! ~ // randomize the order in which the bugs actually run7 ?& B9 i& j0 s. D
// their step rule. This has the effect of removing any
: `. R0 r; C5 [- w4 |( v0 y // systematic bias in the iteration throught the heatbug
, n7 `$ R7 S5 u$ y2 P8 d' j% Y // list from timestep to timestep W% b/ i# H- A6 A, q" e( Z
, F6 F+ \) Z7 z" D- D7 R- N // By default, all `createActionForEach' modelActions have3 Z2 i% L" |; n( T" ?
// a default order of `Sequential', which means that the* g2 y4 R) l. V- q$ j. V
// order of iteration through the `heatbugList' will be
9 A0 ~' \8 p& z // identical (assuming the list order is not changed
$ j2 K# Q H! a# }. f3 l/ i // indirectly by some other process).
* A4 ~! \1 J6 \. S1 K
% E& Y" `0 N! L modelActions = new ActionGroupImpl (getZone ());
m, ]' C3 A" e0 D' p6 ?5 n5 h5 X7 E4 A5 C8 S5 [9 p3 ?
try {, w4 |) e6 l6 n; u: p8 S5 y
modelActions.createActionTo$message
1 c8 l: C9 s. }8 z: a m. y (heat, new Selector (heat.getClass (), "stepRule", false));
) T H5 h2 r' p9 Q% A" S6 \ } catch (Exception e) {
( E' r- v, Z* E9 L System.err.println ("Exception stepRule: " + e.getMessage ());# ]2 e3 G! z! x( g1 f% n- k
}& q" W1 a* q8 X0 a9 n3 t; `7 ?. B6 Y
- x E8 q8 e/ j try {
5 m- i# {+ ~) f( [7 t' p6 {0 R Heatbug proto = (Heatbug) heatbugList.get (0);
( x y7 ?4 P8 E4 o& [ Selector sel = b2 X# a. g2 B. P
new Selector (proto.getClass (), "heatbugStep", false);
/ b% W& l. t. @# G, ? actionForEach =* N! ]* h6 `8 `" K$ R/ I) n
modelActions.createFActionForEachHomogeneous$call
2 d% e- f I' S4 @) ^; N (heatbugList," _( M6 [0 _2 ?2 F" |
new FCallImpl (this, proto, sel,
1 ?' c9 A! b4 S: B: U new FArgumentsImpl (this, sel)));
- |1 `- s7 W- g, Q } catch (Exception e) {/ G& [3 t! |7 _
e.printStackTrace (System.err);
. D0 y' d; C- u }
+ W2 W: t" l. M: P8 O! a
. T% T3 W5 E. F2 r/ o. E& ] syncUpdateOrder ();
* h; E1 K6 Q- v! \4 Q. N- D7 Y5 T$ y3 d3 f
try {' S4 r- T* @, p* j
modelActions.createActionTo$message / n) F7 A& A7 A, U
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 e! c# i& r- m. ]/ ]' o } catch (Exception e) {
. j/ S! C! K& W+ H' n0 h& c System.err.println("Exception updateLattice: " + e.getMessage ());
% G. M& x$ r" ?# v }4 [4 h& L0 m# u- ?& J
0 G" I, c2 F4 z# N" m1 D // Then we create a schedule that executes the; ?+ t2 c6 g) n, \
// modelActions. modelActions is an ActionGroup, by itself it- w5 W6 m5 C4 u5 t, P8 m
// has no notion of time. In order to have it executed in
3 j7 J" L2 U' \ // time, we create a Schedule that says to use the
* t3 H$ |% J- E# w. L' ? y4 f // modelActions ActionGroup at particular times. This
S' S! S" y8 z // schedule has a repeat interval of 1, it will loop every
0 q& j* d3 H: n, V- u' U$ @ // time step. The action is executed at time 0 relative to. h; i3 Q' R& X% u2 K$ |+ g# B
// the beginning of the loop.
8 T! V( y: |! I' N# G! G- D) O( }; @7 u4 [3 a3 {3 _+ u
// This is a simple schedule, with only one action that is' Z" @/ ?- S8 q. j, |3 n
// just repeated every time. See jmousetrap for more, C3 b |5 H$ k2 _0 O3 V) j: m
// complicated schedules.
% \5 B+ f& B& y: o 1 }. Y' [% [- b4 R+ x7 E: d" Q
modelSchedule = new ScheduleImpl (getZone (), 1);# ?0 V5 h6 h8 Z' S8 T4 c* [
modelSchedule.at$createAction (0, modelActions);
: _2 z/ ^) C" }- E" |4 J1 e , m) E0 K9 }* l" u6 s
return this;5 ~( H$ i% s' Z- ^( B `. Z9 C
} |