HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: ^# }. Q! G+ ]3 x, ]" d
7 n! o3 Q' `" y1 _. s public Object buildActions () {
) G- \; j, k# w) \& t; P. j1 ?% r) b% j super.buildActions();- P q+ V9 X$ i e/ P
) {+ W) T, ~; P1 V) ^4 a
// Create the list of simulation actions. We put these in1 T+ R& E6 U) J" ]. B. g
// an action group, because we want these actions to be
# ~# M0 Q3 j* ?) |9 l) I9 A) Y- Z // executed in a specific order, but these steps should3 Y+ i! ] U, ^8 Q# y3 L" h
// take no (simulated) time. The M(foo) means "The message
6 y; {1 V! Z5 E5 b% O) [ // called <foo>". You can send a message To a particular
" l! P/ |7 {+ X- \' i& m // object, or ForEach object in a collection. }& ]/ q/ X# T \5 j) ^; q* y
$ ^3 |5 f: I. i" Y' ?
// Note we update the heatspace in two phases: first run1 _ [" V/ \" E* z4 `- N# ^
// diffusion, then run "updateWorld" to actually enact the% O3 { N4 ?1 D* g- B$ q
// changes the heatbugs have made. The ordering here is
9 ~3 n S1 S) ~8 U& Z# r! G& d // significant!
1 S% h' A, u1 i% h# r
7 ^$ _4 a4 f! p // Note also, that with the additional
# v! { {6 P# S! S7 J5 T4 J& L // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ @$ \ h' N c! ^4 Y) L // randomize the order in which the bugs actually run
+ X$ t3 C7 |% F7 a* `) k+ H+ Y. C // their step rule. This has the effect of removing any
4 \2 ^% {. o! s# D) N x3 O' D // systematic bias in the iteration throught the heatbug
5 w1 w2 r$ j) E+ f2 ~ // list from timestep to timestep
Y3 F7 z* n) I2 ?6 ~5 I
- [6 a5 t( o9 P1 K3 c // By default, all `createActionForEach' modelActions have
1 t$ X3 q* ?; A5 D% ] // a default order of `Sequential', which means that the) ]0 M m# e# [3 t( ]! t
// order of iteration through the `heatbugList' will be4 F% l! z7 }7 o4 @
// identical (assuming the list order is not changed/ O" k& K& V$ ?7 B( M
// indirectly by some other process).' L5 X5 W( j5 i1 G
z6 s W! K! A2 A modelActions = new ActionGroupImpl (getZone ());7 y* }7 l% `; U% v7 {4 p
5 m) E0 X8 k: `7 \9 R try {+ L% n2 n; ]( s
modelActions.createActionTo$message
7 Y' T7 D1 ~2 x+ b+ T, |9 M @ (heat, new Selector (heat.getClass (), "stepRule", false));
1 K9 D! _+ h! l5 d1 F4 c } catch (Exception e) {9 c! v. ^2 v. p
System.err.println ("Exception stepRule: " + e.getMessage ());+ k6 a, d, x8 R$ r% p
}
- a+ C& E# r/ U8 }* r' k& @8 G" I; |& B, h) H1 c
try {
' Z% m) R5 J! Q, Q( s7 k Heatbug proto = (Heatbug) heatbugList.get (0);7 U: ~, K' S% T4 g0 H
Selector sel =
3 `: u( W/ T" v; M new Selector (proto.getClass (), "heatbugStep", false);
% T) ^; [5 s9 K9 O3 ~ actionForEach =( y: S9 W% _2 i3 q
modelActions.createFActionForEachHomogeneous$call
+ S7 e8 G# r3 l$ O& n (heatbugList,. T( u k5 X l) p3 ~- Q
new FCallImpl (this, proto, sel,( |) R( x: f7 r: e$ ]$ n
new FArgumentsImpl (this, sel))); z$ T9 m. I, I; f: @$ A9 C, s! H
} catch (Exception e) {4 A( P: Q6 M2 X* H) ^
e.printStackTrace (System.err);* ]0 L! R9 d) l8 m( i+ l
}8 c7 f/ O& S4 w/ U: T# Q
7 a! f& Q. r: }( L* D
syncUpdateOrder ();/ h. c" y' e2 k* N
) ?4 G5 p: ~8 z2 j X
try {
5 ]- _5 R3 y6 g2 F modelActions.createActionTo$message 0 P* T8 X9 c* ~2 o
(heat, new Selector (heat.getClass (), "updateLattice", false));* w' E: g# u( X' s) l8 b: s
} catch (Exception e) {
- p- M3 H5 x) c, ^( c1 q5 G: B) i System.err.println("Exception updateLattice: " + e.getMessage ());
" b& j' Z+ [9 Q6 c6 n) N8 B e4 B }, S) r \2 i. a, u. V5 |+ [ {% L
: f/ |" b+ Y& w4 ?3 v# o; l // Then we create a schedule that executes the
+ V( J, |8 d5 l4 d& H* ^ // modelActions. modelActions is an ActionGroup, by itself it8 U/ W# q8 w$ m6 Y
// has no notion of time. In order to have it executed in: s- ~! D" X' N, \3 a7 {3 z+ H
// time, we create a Schedule that says to use the3 a6 s$ C+ A5 g, J. Q
// modelActions ActionGroup at particular times. This
7 I9 o" v# {% b // schedule has a repeat interval of 1, it will loop every
; o- P. }2 {9 I5 Y // time step. The action is executed at time 0 relative to
( `, c' j5 ~. n9 ?& a1 }" I // the beginning of the loop.: i$ H% M4 A$ u
/ Q" `. y2 T5 `
// This is a simple schedule, with only one action that is. ]1 m" r: ]: J! X" O. ]; a+ U D
// just repeated every time. See jmousetrap for more! I, Z/ U# D& h) b" ~
// complicated schedules.2 A7 Z6 m* ]0 e
) t t; |: q9 f
modelSchedule = new ScheduleImpl (getZone (), 1);% x4 x7 ]1 A' C. o2 m: o
modelSchedule.at$createAction (0, modelActions);3 x# U( m7 G2 m+ l) `7 c" t3 r
" y6 `0 b6 A! J
return this;
# J8 D% [* j8 E+ {" ]8 D } |