HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- @( Q! b! _/ Z! d* h7 H$ }# v6 c' Z$ g( b! L
public Object buildActions () {
0 p: g! A. u; ?3 v% L% ] super.buildActions();
: e+ m0 k. T# X! } + ~/ M/ s( D: S" h
// Create the list of simulation actions. We put these in
$ T, J! R9 @5 _ // an action group, because we want these actions to be$ h# u' j2 E R
// executed in a specific order, but these steps should
( y0 b- P0 Z& ~# F( Y) L+ G1 J // take no (simulated) time. The M(foo) means "The message. S6 n( c& M: @
// called <foo>". You can send a message To a particular( H. Z R' x8 Q, f% J4 A1 {
// object, or ForEach object in a collection.
# s* a: S2 g2 ?' a
; D" \7 c+ U4 @4 k // Note we update the heatspace in two phases: first run
, o5 n, z7 |) f+ n+ ? // diffusion, then run "updateWorld" to actually enact the- s" _" h2 l" f' U
// changes the heatbugs have made. The ordering here is
' m) q- s, O% g6 I! ] // significant!
" Y/ _* P; Z! V- |0 Z8 N ) H) b; j& e+ Z, y! f& n
// Note also, that with the additional
( A3 y9 i5 j E1 U7 U // `randomizeHeatbugUpdateOrder' Boolean flag we can' ~1 X2 ?; U& `) H
// randomize the order in which the bugs actually run
r3 G1 D9 B; ~. _9 C$ J" |' g7 V: E( `" C // their step rule. This has the effect of removing any0 Q6 h0 J1 }2 l+ p6 p6 X+ O. W
// systematic bias in the iteration throught the heatbug
2 e* X; l: T( a* d- d7 ` // list from timestep to timestep2 C; ^$ z4 Q9 {) M: z
# Y7 R* f) a+ {' J7 U( A
// By default, all `createActionForEach' modelActions have
6 l+ U& ^3 k- l0 S7 l- |- Q( j // a default order of `Sequential', which means that the4 }1 H8 [5 B& {4 |) H; {
// order of iteration through the `heatbugList' will be: H9 i; {7 H& h0 x2 d& ]0 I; V
// identical (assuming the list order is not changed8 x* I9 N8 G% H# B6 ^
// indirectly by some other process).
6 _% ~! G4 i% F& K9 i
/ L8 z( N6 M# I7 k" Y6 u' p modelActions = new ActionGroupImpl (getZone ());
5 v" y/ C" z d! z! E7 G8 K3 ]6 w8 j
, ^$ H; W( f8 j* P5 j try {3 \* q8 M7 o3 L9 o' l2 y! H
modelActions.createActionTo$message1 f3 B# ]& v' L9 w2 f, V a
(heat, new Selector (heat.getClass (), "stepRule", false));
1 d+ Q+ l6 F8 _. c } catch (Exception e) {
3 y1 Z6 V0 N( v0 F; w$ E System.err.println ("Exception stepRule: " + e.getMessage ());
6 Y6 \6 u8 S) w2 A$ ?' l+ H( @ }
: H4 t( { z% ]" P; F: z' z: {1 W* V5 ]# E. P) U
try {
& Y+ h) q4 e5 G/ ?# X0 ~5 U Heatbug proto = (Heatbug) heatbugList.get (0);3 C; N2 _: T# \! k7 C& A# G8 v$ g" _
Selector sel =
; C# r) |8 }" Y new Selector (proto.getClass (), "heatbugStep", false);* G; _5 v# K @# `: T. S1 o; O
actionForEach =
7 ?( J0 M/ b" W4 i( r. N# R' [ modelActions.createFActionForEachHomogeneous$call
/ ^; i' @% p* u5 o. k$ i8 B (heatbugList,
% }( z7 t2 K% X$ g" A( J new FCallImpl (this, proto, sel,) n. D4 G7 d2 b. t
new FArgumentsImpl (this, sel)));9 `+ V3 ^# {9 ?
} catch (Exception e) {
6 g/ p: G5 A' ~, ^ e.printStackTrace (System.err);+ b( _/ N. P3 n
}! G- L8 {0 J: {" d
7 r- h! j$ `9 m2 [( f) N syncUpdateOrder ();
4 r7 b0 |4 k8 `" v1 @3 m$ ^0 o) S; z. o% ]7 s1 T
try {
* S5 F, Z, l& t$ c, Y modelActions.createActionTo$message
8 _0 s# V, S( I$ u# {% \: s, ]3 a (heat, new Selector (heat.getClass (), "updateLattice", false));; J% \& q I5 C7 D
} catch (Exception e) {* ]9 j4 R1 d: z$ _( l
System.err.println("Exception updateLattice: " + e.getMessage ());
+ L6 W$ o+ v* m2 q3 \: Z/ h }
( p, \* Y/ S2 Z& J) i+ K, u5 A
" F6 B* S7 z) K- @ // Then we create a schedule that executes the- I, h( Q7 |# b
// modelActions. modelActions is an ActionGroup, by itself it
+ I" I/ q8 p0 }7 N5 ?" S0 v) C // has no notion of time. In order to have it executed in- P; g0 J% n7 ~4 s* F! D( O: v/ a
// time, we create a Schedule that says to use the
1 @7 N) u- v! {& m* i; v' V // modelActions ActionGroup at particular times. This) d2 s- P0 X8 K. o' J4 t+ V
// schedule has a repeat interval of 1, it will loop every. ^! S5 ]& s" W! E8 g
// time step. The action is executed at time 0 relative to- ]* @8 x: a f9 Q$ d2 Q$ u
// the beginning of the loop.
/ w3 z& d A* t" O
3 e- X# v0 K9 B" @: ~6 f4 `6 F( l // This is a simple schedule, with only one action that is3 T- f/ W" b9 [- d* y9 H
// just repeated every time. See jmousetrap for more, Z1 I# {. H8 Q+ G
// complicated schedules.
# A+ o4 g+ o5 A1 B L- C. A3 p + V9 }: _4 J$ x% T3 B, f/ ]) ^ W8 k
modelSchedule = new ScheduleImpl (getZone (), 1);
" Y% f/ f- i6 g0 v9 K modelSchedule.at$createAction (0, modelActions);
* u; A `& y; G( ~ : C( i. U, ]4 ]
return this;
4 _2 W% V, P" F } |