HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ T! L6 M; V3 _3 d
, j/ r6 T) K k; h3 P public Object buildActions () {
% j, R4 c+ U/ {/ i) `1 t2 _0 e2 O super.buildActions();4 v3 i& k; i5 k/ M
1 q w" \, h0 \- Y
// Create the list of simulation actions. We put these in
. V) |* ~7 M# m // an action group, because we want these actions to be# p$ v/ A+ J7 w8 L, T1 v& u
// executed in a specific order, but these steps should
8 q+ t K9 Z+ \% }0 f/ j) }1 E( L3 a // take no (simulated) time. The M(foo) means "The message
: M1 q: U' Q( J/ M // called <foo>". You can send a message To a particular
2 a; C* s9 M2 Z // object, or ForEach object in a collection.
3 D+ A2 Z' u: ] K4 C 5 e! B& Q; n9 M L; u% i4 C$ x
// Note we update the heatspace in two phases: first run
5 o: p( k9 C$ r" T // diffusion, then run "updateWorld" to actually enact the
) j5 _# p7 h' { // changes the heatbugs have made. The ordering here is" s* s& L0 Z7 I+ h4 [, ]
// significant!6 Z* r- w3 D7 O" e" N1 P
+ n8 L: d0 Y( v$ k! k // Note also, that with the additional3 H9 R: i) A& x+ e2 U& A t7 W5 m( j
// `randomizeHeatbugUpdateOrder' Boolean flag we can! }( t6 o1 E4 l- t2 l# y1 ]# ^1 j
// randomize the order in which the bugs actually run
5 y& `" w1 c' R' |% y$ F5 ^. G0 ] // their step rule. This has the effect of removing any9 [$ e- W& F9 B9 c- s& q) R
// systematic bias in the iteration throught the heatbug# q3 q9 @8 s0 N
// list from timestep to timestep% F! }& n8 l' D. k& E& @8 }0 X
6 N6 k# d9 u B: _# s7 K
// By default, all `createActionForEach' modelActions have- j0 B: d( N# ]; g6 j! |
// a default order of `Sequential', which means that the4 k' F V# B$ o# O. E
// order of iteration through the `heatbugList' will be
4 Q, `$ L( |/ `# B( l$ r8 | // identical (assuming the list order is not changed* D) G! |: F$ Z: r+ k
// indirectly by some other process).% [6 A0 B( K* p- P$ ^$ b- R
3 f" H, p! Q2 q$ M, I
modelActions = new ActionGroupImpl (getZone ());
/ P, W3 R d/ E- Y
" o& N" R# O& Y1 g6 R& q9 [ try {
9 b$ T4 u; E3 C modelActions.createActionTo$message
- k7 g F# J$ K8 K7 m9 g (heat, new Selector (heat.getClass (), "stepRule", false));
" L5 r4 \, w" Q2 r } catch (Exception e) {/ K4 s+ @5 z9 W' R* o/ {
System.err.println ("Exception stepRule: " + e.getMessage ());
' l* d$ l2 S4 z e% \ } ^/ _6 ~3 c7 S1 q4 j% p! E
/ B! z8 _/ j' I2 a* Y+ f, l
try {
; b, Y0 L- c( }" J+ e Heatbug proto = (Heatbug) heatbugList.get (0);) r, \/ t+ ~# j- v8 y5 R
Selector sel = ; [6 ]' X1 A9 K) y# h+ w$ W
new Selector (proto.getClass (), "heatbugStep", false);6 K2 n* Y' P' N; E& d
actionForEach =' i5 o5 a; X% D! y) r
modelActions.createFActionForEachHomogeneous$call
- P' }+ `: E. K* o! L (heatbugList,
7 r o1 g9 M4 A* C new FCallImpl (this, proto, sel,0 M3 T# }6 e. _% L: [' J1 v
new FArgumentsImpl (this, sel)));' d0 U1 t7 N0 C9 [3 }5 I' e% R
} catch (Exception e) {% X* u F' Z& _: g% g
e.printStackTrace (System.err);+ _0 E0 m0 G& g- p
}% E7 t& h( J! ?' i) s
$ Q, ~& [/ c- @# |( H8 A
syncUpdateOrder ();
1 D I5 K4 _ C# z6 c) w* E X: w, P0 E
try {7 k+ F8 o9 Y" O
modelActions.createActionTo$message ) x2 P* Q# u4 N; S" u6 w% P7 ^) |5 }
(heat, new Selector (heat.getClass (), "updateLattice", false));& m# }8 i }& q; V% w+ v7 v
} catch (Exception e) {
, s* g- b) B# J8 K$ G( r0 E System.err.println("Exception updateLattice: " + e.getMessage ());1 C5 i6 W$ i. x' _- s: _
}( }: j" Y. g. B
# s J3 m2 T& x // Then we create a schedule that executes the
: F: [% C) d8 e3 t# b' V4 ?1 ^ // modelActions. modelActions is an ActionGroup, by itself it$ E' x8 h' H, ?3 M& a; X5 R
// has no notion of time. In order to have it executed in5 B+ Z" @& f) @" h. u; e: z* j
// time, we create a Schedule that says to use the: Z+ M6 A$ U% g& K) c
// modelActions ActionGroup at particular times. This" G$ E" |# v' s! E- S1 ?, c
// schedule has a repeat interval of 1, it will loop every6 c* i: i4 l1 E0 t& b
// time step. The action is executed at time 0 relative to
3 l) ~0 o; N8 u+ H% y // the beginning of the loop.
. u0 Q3 t/ r0 h( e+ L' p
) u3 p* \, R$ h+ S // This is a simple schedule, with only one action that is
+ Q6 _/ @$ R& ? // just repeated every time. See jmousetrap for more4 g, U+ X$ H2 L5 T; _. L% _
// complicated schedules.1 C# c5 @ c# F3 ]
* W' _2 h* `7 i' n% p
modelSchedule = new ScheduleImpl (getZone (), 1);. p2 v' e, L0 p) \
modelSchedule.at$createAction (0, modelActions);
! i. H# v; C% C3 R l% S
. U8 i8 A6 G6 \2 G* H return this;
0 E% I, u2 i, ], d } |