HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 i( B3 L* F. `) `5 ~7 B* ~
0 @/ m" s& R+ C6 z( B+ k( r public Object buildActions () {) p% G9 `# n/ p5 \( Z1 H
super.buildActions();$ [- {% ~8 }, ^& ` L
9 z9 @4 z& e3 @' o' Q
// Create the list of simulation actions. We put these in
/ R ]% T5 M# m$ _( g5 |. I // an action group, because we want these actions to be
7 G* Y8 Z8 J5 L- ]' ~9 t1 u w // executed in a specific order, but these steps should! }& a/ P+ M4 A6 O; t
// take no (simulated) time. The M(foo) means "The message
a! l# X) s8 |$ E% m // called <foo>". You can send a message To a particular
5 P1 N: U6 l m // object, or ForEach object in a collection.
\/ v% [5 V+ {+ Z% G' x 9 Y, f/ x1 e% o& L3 x
// Note we update the heatspace in two phases: first run4 S- z8 m8 \) L& F, N) q% z
// diffusion, then run "updateWorld" to actually enact the
" `; t/ y9 i% ?8 E9 F4 B7 L // changes the heatbugs have made. The ordering here is" e5 [% f( W: W8 E# P! B: x( N. m( @
// significant!7 i( K3 T8 J9 O/ T* }, P) y
+ h2 l. J$ j q% H5 U
// Note also, that with the additional
7 R3 Z/ g/ |$ L( O" p( ? // `randomizeHeatbugUpdateOrder' Boolean flag we can" j. U F' o: q% @, Y
// randomize the order in which the bugs actually run
, {- X% X; a! A3 Y3 r, q1 i // their step rule. This has the effect of removing any
. D% L8 }2 B4 y+ l9 F // systematic bias in the iteration throught the heatbug: g9 d, g D4 `) [2 k! I
// list from timestep to timestep
6 ~! c% W3 w# H* G$ g- M% E' A ; l* h1 u4 \5 `" f9 \$ t0 Q
// By default, all `createActionForEach' modelActions have
" W w" m# w2 \6 r: p // a default order of `Sequential', which means that the
# q, d0 z8 h. p) ]# A3 i, r // order of iteration through the `heatbugList' will be& g) _- i( Y8 Z* W& R! N
// identical (assuming the list order is not changed) o/ @- F$ [8 O) s
// indirectly by some other process).2 r* W% D) L6 S/ v
( p9 q V4 p; {7 R5 m modelActions = new ActionGroupImpl (getZone ());# A' C4 I' ?, I6 z# z( S
1 C: e& F, X6 g" `9 t
try {
: q& W$ d8 T! f8 l modelActions.createActionTo$message3 w% H/ U! ~( _) `( ~ |+ F, c
(heat, new Selector (heat.getClass (), "stepRule", false));% j, h/ B! d6 ~7 L
} catch (Exception e) {1 z: S5 Q% Y! r' Q
System.err.println ("Exception stepRule: " + e.getMessage ());! m" k1 D: c! B6 f
}
& B( G0 r" a M0 x" N% T4 z
]2 Z* k( i$ C0 W4 a try {$ W9 ^+ P0 O% ^/ A$ b8 L( l
Heatbug proto = (Heatbug) heatbugList.get (0);
/ |5 p" _+ A3 j* J9 R* X3 _ Selector sel =
9 O' b* l' f) w: V' e- h4 x3 \6 ~ new Selector (proto.getClass (), "heatbugStep", false);. H3 L2 r# A) v `1 d
actionForEach =& L0 o6 E9 w( _6 D& h- b0 x& b" t
modelActions.createFActionForEachHomogeneous$call
. | ]2 a9 \7 }* z (heatbugList,; y# X' y+ \6 f9 M8 {9 N1 C3 a0 d
new FCallImpl (this, proto, sel,
9 N! y5 j% K5 k new FArgumentsImpl (this, sel)));) A1 e" J1 X p4 J# f, S6 D
} catch (Exception e) {+ U; v& t9 [2 p0 a
e.printStackTrace (System.err); e# Y/ @) E4 U! j) q1 j7 G2 R- L0 I
}9 e4 D, T) y9 V- `! K
( O1 b& i& p. K( \# q9 \# k syncUpdateOrder ();
; X6 d$ G! E( h% _
0 F' C/ Q8 K& Q try {( H' W8 S% w% q, h
modelActions.createActionTo$message 8 a& ?0 X7 j9 u+ z! X. J& R
(heat, new Selector (heat.getClass (), "updateLattice", false));+ ^5 N/ T( u) V6 X
} catch (Exception e) {
/ x( w+ V5 n( ~" c* K System.err.println("Exception updateLattice: " + e.getMessage ());2 s) @0 R; H7 L6 w
}
' k- ]) ` T! T 4 l" O8 y+ w" X* Y# s
// Then we create a schedule that executes the
; t& D1 K& t% t4 u# C/ h // modelActions. modelActions is an ActionGroup, by itself it" a1 _# ?' N$ ~' z* j. L+ e3 @' \; J7 M
// has no notion of time. In order to have it executed in
( q+ j7 b9 N6 I- q // time, we create a Schedule that says to use the
0 K* W" @3 J$ ~7 Q B2 { // modelActions ActionGroup at particular times. This& @" Q. @( t" f& G+ S
// schedule has a repeat interval of 1, it will loop every
' B& `5 R4 ]. q/ Q! j- M* Z) b // time step. The action is executed at time 0 relative to2 X* o: Y1 }, \% `
// the beginning of the loop.5 b% F& c6 y. a; a/ l; U
+ |! G8 N# O+ u- P: n4 B // This is a simple schedule, with only one action that is& I5 ]) p- _% p' k
// just repeated every time. See jmousetrap for more y) u7 a: L( z. h7 T5 h- }
// complicated schedules.. C9 V2 U9 l- `
/ b) T5 _8 R( @/ V4 A6 M# Q% A
modelSchedule = new ScheduleImpl (getZone (), 1);: w% S; u4 _' g, |/ p0 ~2 J4 b
modelSchedule.at$createAction (0, modelActions);
( m$ w" f- g$ {/ L, [- h# r3 W ( Y) C" _1 ^" I+ n
return this;
% [4 w. M+ W; `; F, S } |