HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( ~! g; U% T3 q
: e( T& K6 {/ }, { public Object buildActions () {9 }' j1 U/ l+ R" I% x8 Q& r
super.buildActions();
, ^; t& j4 m8 i" W & N% Y* ^" |' `
// Create the list of simulation actions. We put these in
" A6 X3 P. L4 i) ]" ]. [ // an action group, because we want these actions to be
5 o; t0 a! [. X6 j1 \- | // executed in a specific order, but these steps should z8 H& ^( _7 d7 P- b9 r; E
// take no (simulated) time. The M(foo) means "The message
5 @7 ^. \+ I& U( H% z // called <foo>". You can send a message To a particular6 ]9 {1 Q) y. G$ Q/ i
// object, or ForEach object in a collection.+ H3 P) |3 Z5 w$ ^
; ?0 q2 o, o3 v( r, W // Note we update the heatspace in two phases: first run
! p* ^1 k& f1 `& u // diffusion, then run "updateWorld" to actually enact the D, B" Z$ |- ~+ s
// changes the heatbugs have made. The ordering here is
; r- d6 S; ?% B% G. k# J! H9 _3 h // significant!4 N: Y& I+ m+ K: Y7 P& l- U
8 \! _+ E$ f, K
// Note also, that with the additional$ u0 c# X0 P* e6 J+ @5 H
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 t% U! L3 i/ i- P // randomize the order in which the bugs actually run
- w* R5 q# s: M1 \- ?( t' ? // their step rule. This has the effect of removing any
+ {/ o/ D4 q' ^( T! J# G% e; k9 l // systematic bias in the iteration throught the heatbug
5 ^1 P0 I" V8 y! f5 b5 q // list from timestep to timestep
+ r2 X$ F H- r) M& {# w4 v , h% c4 P( E" N
// By default, all `createActionForEach' modelActions have. _1 f0 h9 M4 S7 |7 M- M; @% b6 [ U
// a default order of `Sequential', which means that the
; Q5 O4 S3 y1 T# y3 r0 |8 B6 B // order of iteration through the `heatbugList' will be
8 ^3 z# Z) L/ p // identical (assuming the list order is not changed/ ^. h# [3 w: p
// indirectly by some other process)./ `! o7 U! y# t+ m& w
! U- i; H+ f/ T) k modelActions = new ActionGroupImpl (getZone ());
0 m/ O: {& u ]: T# d
1 F8 ~- N! K: ~. o; ~2 b' {$ o. L try {
( @( W! T( x$ P( A4 n9 L7 A* l modelActions.createActionTo$message$ G8 {- ?* F/ F, }5 k1 J3 j
(heat, new Selector (heat.getClass (), "stepRule", false));
$ @! w6 N+ a* I1 ~3 `" j7 R } catch (Exception e) {
# I# l. ^' k2 @0 h5 u2 o* { System.err.println ("Exception stepRule: " + e.getMessage ());. k- S Y( n# C8 P9 i* ?
}
8 W# ?; j( ]2 ]7 h, b- m7 G, `
]2 \- Q8 D. e& Y4 o( R8 T try {, Z% y" P: D s1 n- t9 g! X) @
Heatbug proto = (Heatbug) heatbugList.get (0);
. \1 r/ a4 c9 p+ a3 i Selector sel = . `/ y8 [8 |, k, R, w
new Selector (proto.getClass (), "heatbugStep", false);, A: n# u; _3 S! A% J" h' {7 H8 X
actionForEach =; B u4 U3 |2 u4 C" [& T$ {. n9 w
modelActions.createFActionForEachHomogeneous$call
3 ~5 q" k7 w6 h4 s) |5 [5 \ (heatbugList,
1 t- v5 U; l7 {/ ~1 d" f new FCallImpl (this, proto, sel,
8 [+ C: [/ G9 P' e! ? new FArgumentsImpl (this, sel)));( r! Z( T% ?1 b9 U2 w
} catch (Exception e) {
8 e7 M n: _8 b* s1 I5 f e.printStackTrace (System.err);2 B) l4 F7 O( S/ N6 Z
}
5 d1 t' w5 U0 ]4 N/ F
* I x* s3 [; ^" x, e, R# m6 d syncUpdateOrder ();
. O4 \4 }. \: A1 F' n. F1 @6 D- L3 o. \
try {
3 v" e$ w0 d0 k( e modelActions.createActionTo$message
* Q, `# G& b& c+ q. l. y/ F8 I (heat, new Selector (heat.getClass (), "updateLattice", false));
' o" f( A- C9 @ } catch (Exception e) {9 T& k4 @5 P* s R. i0 H5 r8 E }
System.err.println("Exception updateLattice: " + e.getMessage ());
4 A! [4 E; G$ I+ P }
6 t. R( X3 S: e$ ~7 Q. I
U, j3 \9 c, T& K" t2 j // Then we create a schedule that executes the5 g; \. A, w* `8 K( ]% g9 c' _
// modelActions. modelActions is an ActionGroup, by itself it
7 B N! U: \/ h' q+ R' k // has no notion of time. In order to have it executed in' Q' s2 C! ]) |5 a
// time, we create a Schedule that says to use the. A# e# ]; K! R% [
// modelActions ActionGroup at particular times. This+ ?2 T, a& V' I/ W+ M, t2 g [
// schedule has a repeat interval of 1, it will loop every0 J0 o1 b9 v2 b" |4 ^' L
// time step. The action is executed at time 0 relative to
. k% x, R+ ^: k) G // the beginning of the loop.
7 w% D4 ]( ~, |' y: l: P: t6 O9 P1 Q4 x
7 P4 v" J' D% ~' t // This is a simple schedule, with only one action that is
/ g7 u0 t+ e/ _8 W5 T/ L+ @ // just repeated every time. See jmousetrap for more
5 |8 C6 k- i/ e' f // complicated schedules.
3 u9 G: a" g z0 B# {1 u; `3 m7 ^
3 P. y1 l4 l( C0 j( P6 |! f7 E modelSchedule = new ScheduleImpl (getZone (), 1);
2 J; Y4 [4 \( P' D modelSchedule.at$createAction (0, modelActions);
8 Y0 r9 b6 w# B s4 j) i, o
( h* h7 w* R2 F# D' W. k return this;
8 v' K# U8 W3 B5 y1 {) |$ U, p } |