HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 r, L" M) V4 C" I
2 ?0 j& Z: i( k public Object buildActions () {6 r, C# F3 f. X% p6 M$ u8 e
super.buildActions();
% V/ t% c1 Z1 `* e* |, m) _ $ F9 |$ k# E; s u* D* h' Y
// Create the list of simulation actions. We put these in; N! f3 V, d! G6 q1 V
// an action group, because we want these actions to be4 B# I* ~9 i7 z2 u' w$ g4 `, s# h7 D
// executed in a specific order, but these steps should# `/ a9 D: k( g. c2 _2 ` t- d
// take no (simulated) time. The M(foo) means "The message
0 k2 w- r- h2 O" Y2 A // called <foo>". You can send a message To a particular
e! m* h$ L, v7 ?" e( U. w // object, or ForEach object in a collection.$ t( A/ x/ Z6 R0 L
?' A8 k" f1 w/ Y6 J# o! ~: {# j% a // Note we update the heatspace in two phases: first run5 @6 i* G3 `: b! z7 o' r" ?
// diffusion, then run "updateWorld" to actually enact the* D, I0 i1 m/ L5 e4 Q) u
// changes the heatbugs have made. The ordering here is k, k* s3 `8 G+ x
// significant!6 y! C7 D% t9 B0 \3 {
( D% j8 L* i# F9 f9 u% l9 `; l; d
// Note also, that with the additional
& S D- T7 F& M // `randomizeHeatbugUpdateOrder' Boolean flag we can
. Z' T2 e3 i9 b1 r( g9 ^% Q/ t // randomize the order in which the bugs actually run9 L5 F& {0 x- u9 ^4 D0 W5 A$ ]
// their step rule. This has the effect of removing any
; U& c. s3 m2 ?8 v9 U0 [ // systematic bias in the iteration throught the heatbug
# D" \( q+ V: x, W% e // list from timestep to timestep. x5 b8 L* @ {7 S7 a1 U8 f
- u9 |4 O# `- ~, _ // By default, all `createActionForEach' modelActions have1 G% X4 X: h0 i4 Q
// a default order of `Sequential', which means that the
* W+ L( {( v0 s# D4 M) h // order of iteration through the `heatbugList' will be$ n$ a! ~2 v! p3 C1 ?6 |
// identical (assuming the list order is not changed
: Z& U' E- ?& @: i, H // indirectly by some other process).
: c7 ^6 t# I6 x# @ 0 ?) f. u2 i9 [. ?& z) O& _
modelActions = new ActionGroupImpl (getZone ());& d4 d0 r) o# ?9 O2 f9 J
/ Y7 ^, \( Y; w" B2 K
try {
6 I5 M5 u( D" B$ M: @ l modelActions.createActionTo$message
& j3 k# R2 [( m: M9 G$ V- Z (heat, new Selector (heat.getClass (), "stepRule", false));8 o+ q- }1 I) H: M* q
} catch (Exception e) {$ v/ q" S& E& K8 _ c
System.err.println ("Exception stepRule: " + e.getMessage ());
2 T$ j; ^) L7 B: w& x0 T* O6 m6 u }. x- j" z/ A, X6 {
! P* V) w/ G/ i( g4 L8 u- {8 F try {
' M1 n2 u' T: o* C Heatbug proto = (Heatbug) heatbugList.get (0);4 R0 I+ S+ u9 P l2 s& z; ^+ F8 H
Selector sel = ' X0 ]: p# [* z( R" K! z8 n, v( ]' R
new Selector (proto.getClass (), "heatbugStep", false);
4 P0 K( _: U" N actionForEach =
* `( y" S4 ]1 N1 r. s modelActions.createFActionForEachHomogeneous$call: Z: z1 |1 C1 G7 U! m1 z x7 h9 o
(heatbugList,
$ m7 q7 ~( M& B; i ~ y8 o5 n( r new FCallImpl (this, proto, sel,, H2 w; J* z+ C* S0 E5 }) u
new FArgumentsImpl (this, sel)));3 u5 j n3 i3 V, j3 o7 O
} catch (Exception e) {( _' G3 K$ i" y y5 k( {9 v1 ]
e.printStackTrace (System.err);' i8 q# [9 u9 {3 J; z
}
2 E' n3 h! k7 I 3 [8 B. k/ L% a0 V: y! R3 z/ b1 E
syncUpdateOrder ();
- h: S, G: L- ^/ o" g- f/ [
9 N4 g5 m/ J O. C8 j8 P try {
' |! v! S. W1 ]3 z modelActions.createActionTo$message ' V- Y: d5 L7 X3 ?! `
(heat, new Selector (heat.getClass (), "updateLattice", false));4 m. j! k d' z. P7 R
} catch (Exception e) {
# W. v2 W* B7 [ F/ u# X4 q6 i# a System.err.println("Exception updateLattice: " + e.getMessage ());/ z, M% |/ n* _$ U* M ?
}
; K& e" r) Y* b+ i" E+ {8 i
2 A# @) F% T9 b // Then we create a schedule that executes the
2 z3 W9 A7 _+ o \* t+ ]) M3 f // modelActions. modelActions is an ActionGroup, by itself it
4 `: ?, Q( s0 Z // has no notion of time. In order to have it executed in8 W w3 W8 d( s# ]4 \2 Q$ d
// time, we create a Schedule that says to use the
8 m( h4 s4 k m% { // modelActions ActionGroup at particular times. This
1 |, r# c0 U( z // schedule has a repeat interval of 1, it will loop every
a/ K$ Q. s: {; a, i R // time step. The action is executed at time 0 relative to1 y, M+ W. W- s, L7 D& Q) L' \$ v
// the beginning of the loop.4 m4 ~1 g& p, g2 h* o2 c
. j5 L+ N7 @0 t3 O1 s& Q* x! x
// This is a simple schedule, with only one action that is! h- R+ K" i& n0 f% V9 h
// just repeated every time. See jmousetrap for more' U1 {* D5 ?" _$ H: Q. F6 u
// complicated schedules.1 e$ @% e }# L& J2 [
: q0 E+ k- }5 a: M$ }0 T modelSchedule = new ScheduleImpl (getZone (), 1);
$ c8 y/ X9 e; G, Z) d$ R$ v2 u# k modelSchedule.at$createAction (0, modelActions);+ P& v7 l( W4 f" P9 s/ Z; V7 h
, t1 w4 @! w5 V7 `- N$ v9 V
return this;
$ g3 S2 x# c) V8 I } |