HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 s% j* A9 t c: i4 p7 |# n( _6 ?
" u! I) g/ I. S1 v( s; c8 I public Object buildActions () {5 T& F( i" P( d$ G
super.buildActions(); s# f/ M- f8 u4 b7 R
) b5 P% {3 I; A" @6 U! m2 Y3 s( l // Create the list of simulation actions. We put these in! V) F, ]& W( b# ]5 R& ?
// an action group, because we want these actions to be. l7 a6 l! n$ Q
// executed in a specific order, but these steps should
" W6 T; V; Z4 S% j8 }7 Q0 T! R // take no (simulated) time. The M(foo) means "The message \- I* R( t% n* W
// called <foo>". You can send a message To a particular
# V2 d4 J* k7 ], g: r0 j // object, or ForEach object in a collection.7 g; f, Z; E( A6 j8 M3 }
/ N' ~3 B B* |0 j // Note we update the heatspace in two phases: first run
( @( w! C- k8 V5 o# d // diffusion, then run "updateWorld" to actually enact the; i3 l4 ^/ H* \7 s- x& W
// changes the heatbugs have made. The ordering here is3 ^5 q3 w4 t, l: [- P! N
// significant!
- Y/ t) T7 Y% h! |% n! @5 I6 N* P / s" V) I1 c: _3 p5 D/ y
// Note also, that with the additional$ @) J7 e3 H4 c Z( L
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 B& n) |9 j; g* E( u
// randomize the order in which the bugs actually run, m) b( X1 x0 s& T
// their step rule. This has the effect of removing any; e, K: `8 K6 |. r; j. c/ K( ?
// systematic bias in the iteration throught the heatbug
+ u/ E3 A; A1 @; } // list from timestep to timestep
. W2 P5 ^# x8 }6 o- r0 v ; s% W% o: P: n& ?' F7 ?+ C" Z
// By default, all `createActionForEach' modelActions have% a6 U' x. C8 O6 y3 E
// a default order of `Sequential', which means that the: e- s/ h) j) ?! P5 G
// order of iteration through the `heatbugList' will be
, |6 n/ g+ K! @1 H7 ]! o$ J+ R // identical (assuming the list order is not changed5 D5 |- A* c2 t) \
// indirectly by some other process).0 c# C- E& M, T( l4 B9 }3 L
% X* i* K( u8 f9 q* X7 O+ Y modelActions = new ActionGroupImpl (getZone ());& s7 f$ v1 }$ T- l$ s0 f/ r1 x
# p& e5 i3 c& u7 z( C" A5 @) E1 p
try {
) f8 V, n5 o1 N2 \$ Y; u( W modelActions.createActionTo$message$ P/ I- T7 x$ J: S1 r) k
(heat, new Selector (heat.getClass (), "stepRule", false));+ K7 p: k" F$ R z: `0 U
} catch (Exception e) {) D( d" o. V6 e9 ^# d4 p& p' n
System.err.println ("Exception stepRule: " + e.getMessage ());; X2 B! g" _1 `2 J
}
* ^, B; {( R7 w- J
, W p# C- u: X/ |) U" D& ? try {
/ Q" y% }3 K: G) j Heatbug proto = (Heatbug) heatbugList.get (0);" u) }: r, h8 E- t
Selector sel =
* n5 [; \. o$ p new Selector (proto.getClass (), "heatbugStep", false);
( \+ {: X }! l( i/ c actionForEach =; s, I2 C) J% c; ]0 B/ u
modelActions.createFActionForEachHomogeneous$call
, ? m) J* b5 M4 C (heatbugList,+ k5 v1 r5 j6 B ]& a7 ^; S
new FCallImpl (this, proto, sel,
7 |' g. b+ t% ~. d: A0 ^ new FArgumentsImpl (this, sel)));4 z. @1 J X6 `6 a
} catch (Exception e) {% }# {6 ^. l8 W/ {7 Y3 @- ]
e.printStackTrace (System.err);
7 h( i; H" x- ^5 G6 R" n }
& K+ B8 f. u0 _; y, ?1 U' i 4 y( K! k' u' c1 ]$ }5 H6 V
syncUpdateOrder ();
+ }0 _/ s) ?3 _+ D9 L7 r6 N6 a' c7 A" J
try {
$ p1 w/ \4 W k' L modelActions.createActionTo$message
/ f- @4 J, J! R (heat, new Selector (heat.getClass (), "updateLattice", false));5 `# @9 A( {4 y: Y* y
} catch (Exception e) {
3 q8 |1 n ]+ I) \ System.err.println("Exception updateLattice: " + e.getMessage ());
! Z* B3 f6 o! z9 J8 H& d( `* s }7 [! { V( X7 m, i9 K
% @! _* u( C( r+ N // Then we create a schedule that executes the3 R4 ~; P# m; p
// modelActions. modelActions is an ActionGroup, by itself it8 x3 k! \" A" t9 B5 h0 H
// has no notion of time. In order to have it executed in
+ y# T0 I: I" `$ @/ E$ L$ I. D5 P! G // time, we create a Schedule that says to use the
" _; |) |6 i7 W4 m7 [ // modelActions ActionGroup at particular times. This7 V7 b' ~& X0 y7 ^
// schedule has a repeat interval of 1, it will loop every5 ]' N) g- W. j' j! G5 |% x! T# Y
// time step. The action is executed at time 0 relative to
t3 C# b G9 H5 }1 R // the beginning of the loop.
+ I! o! ~2 d4 S0 T* \% j
: ~" c6 r. y2 @ // This is a simple schedule, with only one action that is+ r5 y. i0 z; k' c2 L
// just repeated every time. See jmousetrap for more
% Z& c& k1 d- q7 f // complicated schedules.$ `4 F. W5 n# X3 A d6 J
- g/ w4 J" q2 g modelSchedule = new ScheduleImpl (getZone (), 1);
" A. e+ k8 L& U& U modelSchedule.at$createAction (0, modelActions);& ]6 h* J9 E" F' u% R$ _5 Q' U: L
/ B; b3 w" E: ?6 F. a. L return this;
3 q V/ h2 |, W8 Y& n" u } |