HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# |6 _5 |1 [6 X. V8 x* _" u
$ n2 \2 x5 R2 G! e) l3 | public Object buildActions () {
# U# T4 |* Q7 S( H" u/ o9 R super.buildActions();1 D5 x* f- g( B; J8 d& {8 ?$ Q
2 L' f! g- v, G0 V& g // Create the list of simulation actions. We put these in
# _; u, X' X: N // an action group, because we want these actions to be0 L- |: C8 m! U# w" M+ g2 W
// executed in a specific order, but these steps should
5 p' } E( ^5 @2 y' N. a // take no (simulated) time. The M(foo) means "The message4 ?$ o% x! Q# F
// called <foo>". You can send a message To a particular
6 F3 Z& r. a0 D8 U( Y // object, or ForEach object in a collection.
$ G7 q0 a/ q7 F% u3 H+ H9 L7 E3 d9 l5 h
( t; i+ z$ ~' R7 l) ]& Y // Note we update the heatspace in two phases: first run4 V, e9 T, {( r# C! s
// diffusion, then run "updateWorld" to actually enact the# d1 K% x, h* y$ c Q1 k
// changes the heatbugs have made. The ordering here is
$ S: I; T0 u A8 K7 l9 `* G // significant! O* {8 n" p( ]
3 j% K! K7 ^' C6 ^& s1 c6 q // Note also, that with the additional* G& H7 S+ o; @, ~9 @6 L
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 N3 U" s+ d5 H' ~* s: \! }
// randomize the order in which the bugs actually run
0 ~: J/ b5 q( X // their step rule. This has the effect of removing any1 l" a& o1 [$ U. N# Z- z4 I8 ^& x
// systematic bias in the iteration throught the heatbug
0 C& B: g6 }* M w9 x. l+ F: L // list from timestep to timestep
7 s) A/ U$ r4 `
* j0 r! d+ q( q) j) c3 {+ U // By default, all `createActionForEach' modelActions have5 x* _1 [4 Y3 @* x3 [5 `, W G
// a default order of `Sequential', which means that the
4 z/ h2 w) K3 O, T2 H8 |! C // order of iteration through the `heatbugList' will be& _8 i% v2 R. [5 B- U& s- q7 i2 Q7 c @
// identical (assuming the list order is not changed
9 c) w* K; r2 B* @- { // indirectly by some other process).
+ @" o# `8 h9 L7 V2 D( \
+ C0 m2 q* t% ^$ G! u modelActions = new ActionGroupImpl (getZone ());9 J: p0 ^% V( }. Z1 E" [
1 Q" Y0 }6 I: h: N9 [
try {7 |* p: Q" B1 B7 R
modelActions.createActionTo$message
% |% F- J2 c) b0 a (heat, new Selector (heat.getClass (), "stepRule", false));
1 Z! [% f5 G G* N# U } catch (Exception e) {
$ @- D9 i3 i2 H" _* B7 q( ^# J4 \ System.err.println ("Exception stepRule: " + e.getMessage ());
! r" {9 o: Z1 Q& b: [ }; B; q4 N$ x% _" K) H
+ N( T2 {/ Y$ R* C9 @9 N try {+ k0 J% t! a, g. O
Heatbug proto = (Heatbug) heatbugList.get (0);
$ \$ J D1 n m4 \/ Y6 y2 | Selector sel = : J; u* i- R- w
new Selector (proto.getClass (), "heatbugStep", false);* r7 U/ t5 o0 ]! R% L
actionForEach =& ?( ^2 u6 h3 u" s% ?7 B& o H7 z
modelActions.createFActionForEachHomogeneous$call
+ X/ Q: F4 L1 Z (heatbugList,, x) Q f8 H8 [+ y9 f" q' q
new FCallImpl (this, proto, sel,% O r& @, f3 A! O9 {" Y' s
new FArgumentsImpl (this, sel)));
8 n- K7 t, ]' q9 L5 d2 w" N) m } catch (Exception e) {
! P. {8 ~- \. ~ Z6 p' z+ D e.printStackTrace (System.err);( @ V2 |. O( @5 D5 y% H! r2 |
}
, w, N+ n" f3 Z; v: @$ @; c: C
$ ^6 z, y' L: j/ j# | syncUpdateOrder ();' j% N4 Q, f Q; \ S8 D
) B/ C5 l) i. ]; t8 v try {$ g: I: H: H' T/ e+ ?
modelActions.createActionTo$message , \1 h. C( J# W# ~9 |+ C1 y
(heat, new Selector (heat.getClass (), "updateLattice", false));$ P8 s( w1 S# Y$ }( a
} catch (Exception e) {
; n( s' h8 c/ m+ v$ \ H System.err.println("Exception updateLattice: " + e.getMessage ());
0 g$ f; }, r Q }. S7 ~8 K0 }/ h' f
2 R. W1 i* z) S$ W
// Then we create a schedule that executes the/ v. Q9 z x' N T, y" D: p
// modelActions. modelActions is an ActionGroup, by itself it3 P4 Q/ V2 \5 r- Y7 k0 b, j# Q5 T
// has no notion of time. In order to have it executed in
I$ g1 ?* I" {( g# L4 D; V // time, we create a Schedule that says to use the8 ]5 B& C6 T6 _
// modelActions ActionGroup at particular times. This
, A: C! |$ f+ S3 f5 ? // schedule has a repeat interval of 1, it will loop every( f" K! H5 K' |. S
// time step. The action is executed at time 0 relative to; r9 V, T+ \9 f- `, b- k
// the beginning of the loop.7 l! K" Z3 F! ?, ^! b/ f
" I" ?2 }& A4 s) p6 K& c' P // This is a simple schedule, with only one action that is
; z% J6 g( S" A1 S+ |" j; W // just repeated every time. See jmousetrap for more# Q) [& o0 p$ J c/ t' P' a+ _/ S
// complicated schedules.0 W" s5 k! C" z- _# ]1 U2 h
; X6 \/ k2 V0 Y modelSchedule = new ScheduleImpl (getZone (), 1);
3 Z, @! z3 `9 M8 F) j* L; x modelSchedule.at$createAction (0, modelActions);5 @ ?' k: d8 l; \/ S& ]7 h
" o/ g% s; ~! J7 b, K: S8 ^* |! r
return this;
# G, i2 e# R' p+ }# E } |