HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: I9 e4 X* e5 t" L( @ Y
9 H5 Y: z: ~5 m! H* Y5 v/ d0 e public Object buildActions () {$ I. _3 W' f( f1 J
super.buildActions();( y0 b1 m$ S/ Y5 v; l% U) S
, V) J6 Z; V! k$ P0 ]& g# Y // Create the list of simulation actions. We put these in
1 L' d& Y& i8 t. r# F5 }. t' m- k // an action group, because we want these actions to be; B/ ]/ C* W( j2 U# l4 f7 O8 B
// executed in a specific order, but these steps should, p. _- e) c. @1 c4 P7 K" D# d
// take no (simulated) time. The M(foo) means "The message! h8 }5 p4 x; @6 Q4 T5 {2 A
// called <foo>". You can send a message To a particular
1 |4 n; `$ a0 i( m& T: ^- s // object, or ForEach object in a collection.
( x3 ~: z- K3 T* m2 u + j8 g+ H( N3 f
// Note we update the heatspace in two phases: first run
6 H$ c X4 t+ ?5 l! W5 w // diffusion, then run "updateWorld" to actually enact the
, n$ k |% U' C5 Y // changes the heatbugs have made. The ordering here is
0 b# K8 X6 ~; \5 x7 l7 p- w // significant!3 h6 b6 t$ {- ]. Z$ ?8 ? g
: K; a* x. j8 v1 l' c4 h8 |+ Z // Note also, that with the additional- W' N, J8 {& K
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, U* z1 P: U8 E- W1 C; I // randomize the order in which the bugs actually run% T/ }8 T# k+ C& C0 Q, Z a
// their step rule. This has the effect of removing any3 f: D+ w+ b4 t9 l) s/ `
// systematic bias in the iteration throught the heatbug7 R) h1 t# j* |5 H
// list from timestep to timestep
% N' W9 L5 G8 l + t" I7 b) E% C( g) Y
// By default, all `createActionForEach' modelActions have9 H9 K& f9 z* S7 V9 A8 X7 d. I& X
// a default order of `Sequential', which means that the. U R' ? k0 Q8 h( F. e
// order of iteration through the `heatbugList' will be
3 T8 N" u$ b. L5 P // identical (assuming the list order is not changed
4 `$ Z" Z7 }3 S2 G, n& J9 B // indirectly by some other process).' ^) {- K D8 E0 o' s
: k' E5 G4 r7 f" u modelActions = new ActionGroupImpl (getZone ());7 K& d, u/ ^, g" X
: {+ L/ _- j4 }" e try {
' T3 n' m. t/ o0 o- r modelActions.createActionTo$message+ V- I+ y, q) `0 I% a1 s) ?, k
(heat, new Selector (heat.getClass (), "stepRule", false));, x* V, y( d$ i# M" |
} catch (Exception e) {0 e0 U8 z+ I% H( _; q. Z' s
System.err.println ("Exception stepRule: " + e.getMessage ());
. }! U& c0 S) ] Q+ H* _- F }
7 J. C4 p- }. N, y5 H9 y# H `: `. u/ g' {4 L9 y
try {6 A8 X7 \1 b. H6 O- l: X* N
Heatbug proto = (Heatbug) heatbugList.get (0);
9 l8 P0 [: W$ G0 ^6 k# G+ k" N Selector sel =
& t7 h7 |; I: g3 K" `3 D3 D new Selector (proto.getClass (), "heatbugStep", false);
3 r: v( Q1 |2 p( r' e actionForEach =: }4 x% _4 U. E+ U3 o
modelActions.createFActionForEachHomogeneous$call9 z; F3 w) j6 J2 `$ `
(heatbugList," p+ {! M& X9 g$ ^4 [# y- q
new FCallImpl (this, proto, sel,( C1 j, t( |: W9 d4 f
new FArgumentsImpl (this, sel)));& {6 a4 ?5 d3 J& V9 c/ R8 _
} catch (Exception e) {0 \4 j" a& l: E7 I4 t/ E, o
e.printStackTrace (System.err);0 B F, ^& i6 k/ z( \+ a" l& P/ S
}7 w3 } p8 f& t
7 K6 H, a! [5 I+ H$ g [5 P
syncUpdateOrder ();
" i+ X/ @, a; Q! g3 K- d1 p2 n2 O% S9 k* {( V! i" z
try {! O5 u* Y, f' a3 x1 K
modelActions.createActionTo$message : c/ V, j( F; K$ V' _
(heat, new Selector (heat.getClass (), "updateLattice", false));- l |, x. k4 y1 w' N- ^7 N
} catch (Exception e) {
7 s0 U9 d# R5 R7 L" D System.err.println("Exception updateLattice: " + e.getMessage ());
" |4 B* C$ J/ P) p6 a }( M2 t; ^# h( g& J5 ~6 T
/ W2 s: I# i5 R& ]' S. x7 h. A
// Then we create a schedule that executes the
) i5 q1 Q# b9 m! n // modelActions. modelActions is an ActionGroup, by itself it0 Z; ~) n- V- _7 g! Y( {% Z
// has no notion of time. In order to have it executed in
' d. N- Q- n' ~2 F7 n. O1 _4 P // time, we create a Schedule that says to use the/ X$ a& p/ \( h: x# J% y! z6 e) d7 s
// modelActions ActionGroup at particular times. This
5 t) x% i. A$ U8 H! ]8 ]% X9 U! d // schedule has a repeat interval of 1, it will loop every8 j, D/ D) }" [9 o. E
// time step. The action is executed at time 0 relative to1 t2 u+ a* {# Q+ X% X
// the beginning of the loop.
, t4 |; [: _7 ^& N
: q) n. T1 v# r. P6 q, X. V. V! m // This is a simple schedule, with only one action that is9 ~3 n2 a# h' t/ a* m% o+ ^
// just repeated every time. See jmousetrap for more; V0 y. ?# r; Y9 M& X. E6 g+ |
// complicated schedules.
( r' A; S* @& O I: f2 v
. Z, z ^2 Q, i ]; R modelSchedule = new ScheduleImpl (getZone (), 1);+ F1 o9 T6 N6 o3 J$ ~, d7 \% j6 c/ `
modelSchedule.at$createAction (0, modelActions);5 H: [( O/ a6 |& H" R6 C& m" f
, w; s0 F, _+ M7 q/ D) k- Q6 u return this;, c- m5 z D2 ]% |0 c
} |