HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: Y* r2 U% l/ i" P1 k" }* O( ?) w6 E% l/ e& J; F# W1 T9 L: a3 ?
public Object buildActions () {
7 q/ s! t1 S n3 ?$ ~2 | super.buildActions();# ^8 J* `1 i3 q \: G: z
& @2 w3 s6 e1 a2 ? // Create the list of simulation actions. We put these in7 i7 K3 ~& O- z, ~
// an action group, because we want these actions to be
9 U# p& o2 U2 O: H3 f) Z // executed in a specific order, but these steps should$ M7 H8 Y& e- ]+ R: _$ y
// take no (simulated) time. The M(foo) means "The message7 t* N" C# Y+ @3 H$ h
// called <foo>". You can send a message To a particular! `1 j+ P/ ?5 x3 e5 s
// object, or ForEach object in a collection.
; B. G/ A6 s ]2 j; e' x( m
0 w: ?" h% C! M- R& w( K( A // Note we update the heatspace in two phases: first run
# t& Z. b. P! G Y // diffusion, then run "updateWorld" to actually enact the+ Q6 r3 U8 K E4 }& B
// changes the heatbugs have made. The ordering here is+ B' |+ C3 V. h& b
// significant!( a* l/ _, w) d/ c6 G
& w! U V4 a4 p* s
// Note also, that with the additional$ A$ `1 b( _; d. ^* u
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- Z7 ^- B% |* W: c" u // randomize the order in which the bugs actually run: o2 u2 p2 k0 [) J# n5 b4 O
// their step rule. This has the effect of removing any4 P( w- o7 n) S1 P
// systematic bias in the iteration throught the heatbug" \! G. ?1 X I+ O! K# S) q/ A! d
// list from timestep to timestep' Z9 [7 P4 b& R+ z1 i! Z
9 o+ l/ C' G1 M/ `5 p // By default, all `createActionForEach' modelActions have; x% t7 }2 y' v& G* ?
// a default order of `Sequential', which means that the
' a0 \# a1 f5 X // order of iteration through the `heatbugList' will be% a0 l: u' V q5 {" L7 f. p
// identical (assuming the list order is not changed
# H e" p$ r% }" _/ F' }7 ~# F7 N // indirectly by some other process).
% b: _: E6 [/ k- Z) l7 f C9 b6 m/ }2 n0 |& u3 b
modelActions = new ActionGroupImpl (getZone ());/ w$ l8 o3 A3 T3 G* B+ V
* X3 r# [& g8 p8 W: u4 N
try {
/ O( \+ e8 J+ p; O5 w modelActions.createActionTo$message% l2 A5 I+ U, @- @1 d
(heat, new Selector (heat.getClass (), "stepRule", false));4 \8 D2 i# r( o9 C7 E0 E3 W
} catch (Exception e) {* w4 D# y% i% |+ E1 [
System.err.println ("Exception stepRule: " + e.getMessage ());! V6 r+ g3 m' x1 |/ y
}
- l2 X; L& z$ q9 |, w0 }9 V+ G/ t7 L( P( \
try {
. c( M2 C f5 Y, o6 @6 s Heatbug proto = (Heatbug) heatbugList.get (0);
& S3 j' i, k( M. z/ m+ s Selector sel =
! r1 d8 S+ j, H" O( x) A G% L new Selector (proto.getClass (), "heatbugStep", false);' z" J; T# ]% H* ]
actionForEach =
2 v2 t% X0 S, Z/ [ modelActions.createFActionForEachHomogeneous$call& G6 \2 _3 s( ^- [' W6 n
(heatbugList,, v* C: V8 r% Y) g
new FCallImpl (this, proto, sel,
# E( d! x! r2 U7 j# ?# ]* ]1 ^ new FArgumentsImpl (this, sel)));6 d0 {( }' d/ M5 f
} catch (Exception e) {! }6 I' F* h) P+ h
e.printStackTrace (System.err);# y6 ~8 F1 I1 W+ X
} V! G/ l! S' ]" d b
# o* j {% |8 E! {$ ?" P+ n& r2 D
syncUpdateOrder ();
* }% f2 n& z! a9 ?( x9 F: u3 f% G9 Y$ `: m
try {+ ]$ F- ]! I( h0 ?% o% A
modelActions.createActionTo$message # e- [) ^1 p E" J" l& V
(heat, new Selector (heat.getClass (), "updateLattice", false));( a h0 ^9 a! A
} catch (Exception e) {
& s7 }# d* J* s! O- L$ s5 v System.err.println("Exception updateLattice: " + e.getMessage ());6 z1 t: w+ X) w$ \6 t |! {- L
}$ G8 G! ]* v( b
! U6 V0 a- \6 G" w4 K
// Then we create a schedule that executes the
8 Z/ p6 B4 V+ a6 J% V // modelActions. modelActions is an ActionGroup, by itself it
! ?' J) X$ R8 @8 H( O% y& X8 y/ d$ G // has no notion of time. In order to have it executed in
( {# ?2 ~5 Z7 p( F // time, we create a Schedule that says to use the0 D i- w& b) u# U i
// modelActions ActionGroup at particular times. This, J9 ?, ^" `( N% J: X
// schedule has a repeat interval of 1, it will loop every U! R/ `* t6 G: A
// time step. The action is executed at time 0 relative to6 H2 F8 z* Q9 u, i; m
// the beginning of the loop.' n$ ]# n/ v% F; m. H3 d+ |: T
# t2 D$ y7 Z% v% N Z& w // This is a simple schedule, with only one action that is; H; G/ W, }( b$ a$ m; i, B
// just repeated every time. See jmousetrap for more( ?, C+ a6 Q5 k
// complicated schedules.
9 g% m+ F3 d+ i8 w/ |% F ! N* e5 U& ~% C6 a8 U' n0 X
modelSchedule = new ScheduleImpl (getZone (), 1);* z8 Q/ T1 V4 ~; ^' a H
modelSchedule.at$createAction (0, modelActions);7 ^: [+ R% Z F0 F2 R2 Z
! H- g3 q# ?( b' C6 F7 e8 p- i return this;9 b# _3 j- M- U! }. w2 X
} |