HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 B! s% z5 O3 n1 T% B
# ~/ `% H+ Z, m/ Q, q. u
public Object buildActions () {
6 b1 I( L3 X+ N% m: I super.buildActions();
/ @7 `% d# B# H9 Q , U4 x9 D. E5 ?( u4 A
// Create the list of simulation actions. We put these in
7 E: D* x$ o& U3 w! m$ X // an action group, because we want these actions to be( c# j1 z( k' l( z9 b% i" }
// executed in a specific order, but these steps should
& _/ [: B; E6 u: U; _- r/ L" ]* N // take no (simulated) time. The M(foo) means "The message
/ f1 c4 v5 I; m // called <foo>". You can send a message To a particular. l9 W" |+ Y x" [' t! y$ r+ e% u
// object, or ForEach object in a collection.
# Q$ j+ G/ m8 X' ?1 b! x0 H : c! b$ n S0 X6 w
// Note we update the heatspace in two phases: first run
( Y+ W+ z6 e+ |- H // diffusion, then run "updateWorld" to actually enact the
$ A4 j5 j& a4 w3 b! i& c, n0 o, L // changes the heatbugs have made. The ordering here is
' Q: m, e( b, I. U4 x9 r' m // significant!9 u( @/ `+ o' d: Z5 y g, _
: v: A- _$ s" i4 G0 ? // Note also, that with the additional, B% i8 A0 z" l0 N) w
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& n0 o! @# p. W. x // randomize the order in which the bugs actually run
! \2 `! K& [% y0 \2 m" p // their step rule. This has the effect of removing any
" C* O: r9 a. l; H2 ?) r; Q // systematic bias in the iteration throught the heatbug4 @1 \0 y) }. k7 \4 D
// list from timestep to timestep
& S. G* K* } K! v6 z' A) x % V! F( `7 a& H0 S5 p
// By default, all `createActionForEach' modelActions have+ b) j/ v, X: e- x. x
// a default order of `Sequential', which means that the r9 j5 [0 Z- J6 E# F/ }
// order of iteration through the `heatbugList' will be
. }% m6 I6 X3 ~& `/ P, V // identical (assuming the list order is not changed$ F, s8 j! ^* d5 C$ ~7 |# V
// indirectly by some other process).
, j. |$ F9 j* b) ~( x( \ . X7 S" K4 r! E5 I! S1 D# F8 H) C
modelActions = new ActionGroupImpl (getZone ());6 Z; w5 }, q/ A. x% c
- u/ h, ?. D/ C' f, f, ?
try {
: ^5 U9 k) u, ?% e ^0 {3 F modelActions.createActionTo$message
( R3 S1 d( H* k% ] (heat, new Selector (heat.getClass (), "stepRule", false));9 N( n. M2 a( K1 L% A
} catch (Exception e) {
6 r Z* s' O3 R% q System.err.println ("Exception stepRule: " + e.getMessage ());! V+ S+ W, A$ d3 y( p) O1 u
}) V+ _1 ?7 B$ U$ J. L' y$ O
* w1 q1 S( U2 s4 y
try {
G8 _. }+ r6 `# x( M: t% ^ Heatbug proto = (Heatbug) heatbugList.get (0);
' L' E+ e L9 H! o Selector sel =
! O3 L- E0 S G. C( I0 V new Selector (proto.getClass (), "heatbugStep", false);
+ R3 E R; T. K1 I0 V actionForEach =( Q) B3 Y' a! `) }
modelActions.createFActionForEachHomogeneous$call
2 v* n+ k$ j* k: B6 x1 x4 f) \ (heatbugList,
$ T( j% g9 ~* W( L8 Q new FCallImpl (this, proto, sel,; y2 p4 ~% V2 n7 W, ?% ~
new FArgumentsImpl (this, sel)));
# e) Z9 l. J! H. C } catch (Exception e) {
, l* z" d& |8 @' I p8 ] e.printStackTrace (System.err);
0 G4 B8 T( k5 |0 ?9 f }
v/ e* r7 K# g; z* c L$ d " x& w: j9 H* w/ x. e
syncUpdateOrder ();
6 @ f" \2 I: |2 [5 v: O
4 T+ G- Q& \ @0 @, H try {& ]( [# ^' C( g% W8 q) c! L
modelActions.createActionTo$message 9 C N p2 {# C1 B& g
(heat, new Selector (heat.getClass (), "updateLattice", false));2 }4 H; b7 P) `
} catch (Exception e) {
5 b- j2 L) [8 ^" B9 x) z) W System.err.println("Exception updateLattice: " + e.getMessage ());. Z) j8 x+ A; h& X0 P, j
}* k% S! y. @5 x8 q7 K+ K: d
0 W; g1 T, q. g) A( A" x2 }
// Then we create a schedule that executes the3 i. O( e9 S2 y; f* Z. @6 C% q
// modelActions. modelActions is an ActionGroup, by itself it
/ [. o' | o6 x5 H5 g, i // has no notion of time. In order to have it executed in
+ H/ g- @7 `$ r- T3 R- ~ // time, we create a Schedule that says to use the, T6 |. E# q( `" F' S' H e2 G. r8 [
// modelActions ActionGroup at particular times. This/ a3 Q+ V+ d4 p" a
// schedule has a repeat interval of 1, it will loop every9 C5 C* w, g( V5 U& Q( r' E7 @1 e
// time step. The action is executed at time 0 relative to
9 A( \7 ?* J$ f8 c& T9 Z: H7 Q // the beginning of the loop.$ f2 n% w: c" Q: Y
Q$ e+ [; S1 {6 q F7 U) |* `9 h
// This is a simple schedule, with only one action that is. w( M8 s `; O6 t& Q/ Y
// just repeated every time. See jmousetrap for more/ Q. I8 z' g3 p$ _$ f ]: Q$ W
// complicated schedules.
7 U5 L/ G2 Z4 Q& r
$ [0 n& a6 Y. s modelSchedule = new ScheduleImpl (getZone (), 1);; [9 u. b5 r' z4 Z0 n/ x8 p2 ?
modelSchedule.at$createAction (0, modelActions);) v W4 G# K+ u, v8 \
$ J$ \4 |: [3 P8 b: x2 m
return this;
i t7 X% W% E( V, ~, B } |