HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 p/ Q, }. ]: A, v! P9 m5 Q' q
7 L/ p' d, I! ^( @' h; C; ] public Object buildActions () {
( `6 z) t% x9 Y1 {# l9 H g super.buildActions();/ s& J2 J5 K: |, k
! e0 ~/ D& F8 `2 e3 K // Create the list of simulation actions. We put these in3 F# T/ {/ S) U3 d# m& O1 y( X
// an action group, because we want these actions to be
1 u0 B+ a; m: X7 G$ ?/ x2 _7 v' H // executed in a specific order, but these steps should! E% [& c% P/ H+ P/ f! h7 n3 [
// take no (simulated) time. The M(foo) means "The message. y9 h' D, F; c1 R. U0 r# I6 j
// called <foo>". You can send a message To a particular) p) ^9 ?3 S4 I
// object, or ForEach object in a collection./ s. ]1 N5 `$ S" L! r+ z
! E2 E. C/ m/ i7 ?, q: _9 ?( z // Note we update the heatspace in two phases: first run
4 g6 ~$ E# s0 ^3 @ // diffusion, then run "updateWorld" to actually enact the2 \) |: B+ d% o) i4 I) Y* H- [. }* q
// changes the heatbugs have made. The ordering here is8 M4 ?& X8 e4 c3 J# @
// significant!8 W) B. k$ d, m
1 N4 T0 c8 G4 E
// Note also, that with the additional
( r& O: h+ Y( q. {0 C; ~& o. F7 j' U- s // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 \+ b. N5 k ?( B) ? // randomize the order in which the bugs actually run
' u; Y& O( |9 R- e& i5 A! f% g // their step rule. This has the effect of removing any
( L \3 u* h0 w h; y // systematic bias in the iteration throught the heatbug7 ~9 z+ F+ F9 S# i9 D' q: b1 w
// list from timestep to timestep: ?6 ]0 F ^: d5 A3 {
' k& z! q5 M1 z: O2 m. q. ]' U // By default, all `createActionForEach' modelActions have' m0 ]- r8 F, e
// a default order of `Sequential', which means that the
2 H- K; S7 g" t4 ] F3 r // order of iteration through the `heatbugList' will be
2 ]' z7 O; a- z; ~- m+ f* r1 } O // identical (assuming the list order is not changed
% k; h7 C5 B" H4 ]* ^ A // indirectly by some other process).
0 U" g* q9 L" p7 _% h
% {% ~1 \. E) R( ]2 ~ modelActions = new ActionGroupImpl (getZone ());
9 p* l6 m5 O2 ~! j7 h& x R& s& g+ k! b: L: y; }* M% h; W% r1 K
try {
9 n3 J+ Z8 b J! ^+ z( _ modelActions.createActionTo$message
7 n6 P4 O, D2 L1 X- y P ^$ I. C (heat, new Selector (heat.getClass (), "stepRule", false));* ?+ Y: T. y' U/ S$ Q
} catch (Exception e) {
[! K5 M1 i4 o: i& c- D4 t System.err.println ("Exception stepRule: " + e.getMessage ());
9 `; ]; H. L( Y' K) @+ b }2 O. Z2 j- S/ @& c c& k" o
: L! }. U/ x L8 I. U try {
4 Q( S* l" w! m" d+ l8 l Heatbug proto = (Heatbug) heatbugList.get (0);7 i \% H- {% P2 M2 [% I
Selector sel =
! L1 t; v" A5 d9 ~- @! p2 K new Selector (proto.getClass (), "heatbugStep", false);
% H$ b5 E) Q- D$ M/ p actionForEach =0 Z6 G% a" P" e# h9 D- r* V; Y6 V! \
modelActions.createFActionForEachHomogeneous$call
7 x$ ^& {& S. o+ \ U, N (heatbugList,9 B# n3 J* t8 s$ x
new FCallImpl (this, proto, sel,* J* M3 m* [% f% H
new FArgumentsImpl (this, sel)));
6 }& Y6 L/ E7 Q; e! z3 } } catch (Exception e) {' ` s: ]5 x! H! Z, ^% z
e.printStackTrace (System.err);
2 e/ r: x; ?% l4 d6 K9 q4 Y0 _' z3 [ }# J5 H( _ l1 `* U5 }1 y. X$ Y. ?
8 h# n0 `/ o4 ~
syncUpdateOrder ();
! }6 F R. `7 a
, b; H/ t) |- \ Q2 q# u try {
' ~3 M; J& r: z% I modelActions.createActionTo$message
. }4 v+ Q! T4 W2 l8 v) A (heat, new Selector (heat.getClass (), "updateLattice", false));& l0 _& Q- P2 c! c
} catch (Exception e) {: m/ y% B% k7 s' s0 F' @# O
System.err.println("Exception updateLattice: " + e.getMessage ());
4 \$ I5 F$ W( W+ d6 `. C }
% n$ E: ]. v) W- }+ @; o4 A" T ( j; _, ~1 J0 D
// Then we create a schedule that executes the4 x& f8 o- y+ H4 Y1 c* J. ^, D' b. ?
// modelActions. modelActions is an ActionGroup, by itself it
. Y& c/ Q7 Y- w* }3 a // has no notion of time. In order to have it executed in
- P% B6 r" b0 B. A$ ]5 O0 H% H) y // time, we create a Schedule that says to use the3 m+ Q! U, c4 C* ~5 a# L1 W
// modelActions ActionGroup at particular times. This3 L, |+ T/ T9 M% G
// schedule has a repeat interval of 1, it will loop every, K, s9 D6 f9 T$ s Q
// time step. The action is executed at time 0 relative to
! d) @, F$ h9 B$ }* C8 } // the beginning of the loop.
" E. ~$ H2 {, G, P3 n0 y& U5 R( h. {' N* @1 B9 |/ D& {
// This is a simple schedule, with only one action that is0 M% U! K) x6 q/ N% ~
// just repeated every time. See jmousetrap for more
% b# G; @+ z2 j* Z# _2 O: \6 y" e8 r // complicated schedules." s8 y' j; I6 Q/ y$ i6 Y+ s
7 x2 O% R( G- |5 _
modelSchedule = new ScheduleImpl (getZone (), 1);* C, A/ o( a2 Y) B' r$ E/ e0 B
modelSchedule.at$createAction (0, modelActions);
. a) ?2 \' V! }+ W! z ; e7 M' H! C* K' T, U
return this; t& R `& u( B+ Z
} |