HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: s& [& w2 s7 H- I, D+ ^
- a2 l+ _/ j, p: A: M public Object buildActions () {
9 A2 m. S1 o4 v( R! m f4 T) S0 T super.buildActions();+ x3 k+ s% F- f* S- ?8 \& o% F
5 ~: d8 J8 h# j1 T6 x( }
// Create the list of simulation actions. We put these in
, L1 h# f# S* x# R" e // an action group, because we want these actions to be
) G0 ^5 ?5 N9 d6 B& o // executed in a specific order, but these steps should
O5 ^# e; `( n) @7 l( l R2 X // take no (simulated) time. The M(foo) means "The message
4 {* o* G; j+ n6 i // called <foo>". You can send a message To a particular# |8 ]: F) w( k" l& b
// object, or ForEach object in a collection.7 l/ F& _8 j$ h) g/ X
; t: f( f! p6 e( K9 s
// Note we update the heatspace in two phases: first run0 B8 B* w' R+ ^, l' b$ p0 v# F
// diffusion, then run "updateWorld" to actually enact the$ z; R6 K, y. p2 S) ^0 _6 W
// changes the heatbugs have made. The ordering here is
0 |5 Z; {8 X- Y3 @1 u" ^ // significant!
9 p( @7 G$ k8 |! Q- `, | 4 R* E- J3 R8 P$ V& {3 o
// Note also, that with the additional
: C" i: a9 Q1 ] // `randomizeHeatbugUpdateOrder' Boolean flag we can2 V$ M" B& O; F! z. H# m( A6 {
// randomize the order in which the bugs actually run
' f: o! `4 f! H6 v7 _! f) a7 S // their step rule. This has the effect of removing any1 v- R8 c$ C0 B3 I9 }
// systematic bias in the iteration throught the heatbug# `" g/ G$ e$ [2 I
// list from timestep to timestep
$ T g. V& g/ |/ Y 7 s/ ]8 U/ t1 }$ S
// By default, all `createActionForEach' modelActions have* m% \$ q( C) `9 [4 n# K
// a default order of `Sequential', which means that the
: k) P- C$ p/ u! g" z" H9 u; ]' \ // order of iteration through the `heatbugList' will be1 `- i5 @( _# ]4 m, A
// identical (assuming the list order is not changed
" U) N- x: m" C- l5 p4 H9 A // indirectly by some other process).
0 G& Z% @4 G# e% y' f" f5 l! V ( M' M) k x; c# V% }
modelActions = new ActionGroupImpl (getZone ());" x+ s# P U+ @5 k6 k: }1 ?
7 B/ S* D8 {4 \
try {: j+ Z, q# e8 t! t, O( [3 c& U. f
modelActions.createActionTo$message, h' [) P6 Q7 V3 n
(heat, new Selector (heat.getClass (), "stepRule", false));& ?. n# c! D. g* ^$ ?
} catch (Exception e) {
* x$ u4 {$ z$ ?; r4 `! D System.err.println ("Exception stepRule: " + e.getMessage ());
+ c: A$ ?, W, `3 a5 G }
' Z, {( z; W- {6 \
7 [+ P, [" q; |7 R- I: R- v try {; z5 a$ |9 O1 c6 t
Heatbug proto = (Heatbug) heatbugList.get (0);
; ^4 g8 y/ V4 i. b; M Selector sel =
$ c! r) |3 r* c4 b7 r6 P d! a/ E new Selector (proto.getClass (), "heatbugStep", false);& f% L5 O4 j9 l' \9 s5 O4 Z0 w
actionForEach =5 Y" B/ c: w0 F1 y4 z0 I6 i# d
modelActions.createFActionForEachHomogeneous$call
- B8 Z0 c8 Q9 H5 T5 J (heatbugList,0 ^* e* S' _' C1 O$ K& P% B
new FCallImpl (this, proto, sel, ~, l" Y3 E- Y9 [4 _7 Z. p
new FArgumentsImpl (this, sel)));& }' k- y" ?3 [7 k+ _
} catch (Exception e) {+ a3 ?4 ?$ ?& w; U$ J ^
e.printStackTrace (System.err);
& g' G: K2 G9 f& K7 r }. B7 X# ` [! `& A
9 F) |5 f& i: C; Z7 J1 f syncUpdateOrder ();& Z. b8 P! D9 E2 D% }! C
8 ]( G9 C j5 B( ?
try {
5 b6 s; M X' S modelActions.createActionTo$message 5 z; @& d1 G2 y- l4 T# V7 b4 E- O) G- m
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ K/ Z7 L7 h0 C# d6 H7 d2 p } catch (Exception e) {
' y$ w+ V# ^. g2 v System.err.println("Exception updateLattice: " + e.getMessage ());$ V5 N( T% T- @" D j
}5 r! p# M t4 r0 t. m% \5 X* z
+ s6 S. F- P3 K2 X
// Then we create a schedule that executes the# K/ |' R8 Q, u# q1 F0 a$ s* m
// modelActions. modelActions is an ActionGroup, by itself it* G8 ~3 G- c z/ G% w1 U3 W2 {( K1 z
// has no notion of time. In order to have it executed in
5 h" k H& i: C# z- N" P // time, we create a Schedule that says to use the- E+ U; ~" q/ N A, z6 O1 o, K
// modelActions ActionGroup at particular times. This
1 m9 }# p0 K( N# g$ M0 r // schedule has a repeat interval of 1, it will loop every
3 D# [2 K/ \& b // time step. The action is executed at time 0 relative to1 b- {* ]8 K! u7 a
// the beginning of the loop.
u7 U+ }2 E$ b
% Q ~; U9 s& W& U8 F // This is a simple schedule, with only one action that is
& J0 o: C% Q4 F1 b // just repeated every time. See jmousetrap for more
7 w& M9 E V, @$ a7 ~1 u- r1 m) j // complicated schedules.$ {# } S/ j4 w! [# q
; l2 N/ _6 U% r1 q7 V2 |+ f: z modelSchedule = new ScheduleImpl (getZone (), 1);) |) t' F" n, x! @3 L
modelSchedule.at$createAction (0, modelActions);
( \7 U N/ a5 g4 f% {
9 q1 S- V+ d7 K, O- Y return this;( y# g, w# }" w9 X2 x
} |