HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% a) y6 q% a9 a% E B
% i4 N4 k3 B. c4 K public Object buildActions () {' ]; L- ]2 B: e2 O& n
super.buildActions();: L: v' }# P9 i" y+ ~ A3 O
U% ]$ t* K8 ~+ A8 n // Create the list of simulation actions. We put these in* {' K8 U' x6 W5 Z
// an action group, because we want these actions to be M: V' ~# v* }, S1 U
// executed in a specific order, but these steps should
. m/ C, l, e T: y // take no (simulated) time. The M(foo) means "The message
# G1 b( {/ W) r0 o4 Q6 u6 p1 { // called <foo>". You can send a message To a particular* L! f }0 |, t% i! ~9 @) F: q' i
// object, or ForEach object in a collection.
}. T' e, V( Z: U$ R
0 Q0 X' n0 ]# G/ H. \3 f3 \6 b // Note we update the heatspace in two phases: first run# F( c! A2 b0 H1 ^4 e' D
// diffusion, then run "updateWorld" to actually enact the
" N0 D( T ~: v // changes the heatbugs have made. The ordering here is5 r6 W5 ^' e) L- F: \
// significant!) H1 Y; a# F( n ~6 o
6 c! ~' O+ Y6 W1 S- ~
// Note also, that with the additional
+ S* h5 x) s6 l. y // `randomizeHeatbugUpdateOrder' Boolean flag we can
( ?4 f$ K- I0 O; r# @ // randomize the order in which the bugs actually run
8 Y3 C, x3 B, ~. j$ z // their step rule. This has the effect of removing any! u; f9 c9 x0 {" ~4 c2 i3 g% O
// systematic bias in the iteration throught the heatbug1 x1 a0 A' s8 z6 R
// list from timestep to timestep, `) s( g! |7 J- T
% y) _* H1 y* ~' T$ r& @0 g- |
// By default, all `createActionForEach' modelActions have% A* `' C) N3 i4 r; [# R5 n
// a default order of `Sequential', which means that the! i0 ~( z v7 N H
// order of iteration through the `heatbugList' will be
A6 _# ]+ X" |. O8 K3 a- I, B // identical (assuming the list order is not changed
3 z Y, Y. J9 R# ] // indirectly by some other process).
, Y5 _) H$ X7 b, d& }9 Y( O & t: C. {/ f. [3 ^
modelActions = new ActionGroupImpl (getZone ());+ X$ F. @8 D7 P
7 T; d2 g/ ?! b+ F" c try {5 g& ^; G! W( o$ V) E9 }5 P3 [
modelActions.createActionTo$message# z6 j+ m( @ S, f
(heat, new Selector (heat.getClass (), "stepRule", false));
7 P2 X( v! W+ A } catch (Exception e) {
; [) i& o- D0 w: A: f/ R System.err.println ("Exception stepRule: " + e.getMessage ());# x2 ?9 U" C) b% W h% ]
}
6 U" W6 t/ I( [ C, @* Y% P
/ a9 S, ] \1 P try {
* S6 ]& V4 F- v9 d6 c# C: L: E% u Heatbug proto = (Heatbug) heatbugList.get (0);
) M% F: K7 F8 I5 S Selector sel =
* k% p0 A4 q- W' s c: k( A new Selector (proto.getClass (), "heatbugStep", false);
! T7 w! w& Z s5 m" m actionForEach =
+ b% u+ ?$ i" Z. ~* k$ U* ? modelActions.createFActionForEachHomogeneous$call2 {! ]6 z: R# j, y
(heatbugList,/ @) `9 B2 b: t, o- P2 i) M
new FCallImpl (this, proto, sel,7 Q0 E! o/ e- D% b2 |+ B7 V K# |) @
new FArgumentsImpl (this, sel)));! Y1 @0 u. ~, g+ A& q4 W
} catch (Exception e) {0 a' v# W: R* k8 l
e.printStackTrace (System.err);
( b5 r+ L) N; f5 h# t }7 [2 O8 Q c6 C$ n. f1 S' r
5 E, l5 p$ z0 b" a7 d3 H
syncUpdateOrder ();7 ^( ^$ `/ O, t0 k' d
: j" [9 Q$ v( z1 h/ Y
try {" L1 ], I& z5 J+ O3 M6 u
modelActions.createActionTo$message
5 F1 F4 i6 I: D) a; ^. K+ H8 T (heat, new Selector (heat.getClass (), "updateLattice", false));( @6 B: k% W& F8 b
} catch (Exception e) {* X* D8 y9 S/ e3 n$ P/ x2 U
System.err.println("Exception updateLattice: " + e.getMessage ());4 Q$ z+ B4 w" z; G
}
1 `' M; b, N* L- Q7 }0 D( _
^: b( g" z$ K4 g // Then we create a schedule that executes the
) o3 c! T( r. b. a% x/ F) K: R! C. z7 d // modelActions. modelActions is an ActionGroup, by itself it
- q% ^0 Y* F( K! H // has no notion of time. In order to have it executed in) V& P# V5 Z* @* B' U% _
// time, we create a Schedule that says to use the( Y: w. p$ T9 |' y }+ i; N3 x% H
// modelActions ActionGroup at particular times. This
' ?7 i2 T8 y5 M( f // schedule has a repeat interval of 1, it will loop every
6 }( f7 i# W3 x // time step. The action is executed at time 0 relative to: d' W2 \3 g6 s9 _6 D
// the beginning of the loop.
! O9 K( S& L k: i1 q/ s
. t7 H+ e! f' S/ S2 W' T% { // This is a simple schedule, with only one action that is
x8 `: X7 G* o5 Y& ~7 d4 G // just repeated every time. See jmousetrap for more
) m5 E) [1 S3 W! }6 A // complicated schedules.
( w' ~0 F: S4 p; f
; J( j( B" {2 s/ a modelSchedule = new ScheduleImpl (getZone (), 1);
( _+ C+ e9 W; @3 h8 K' m1 z( h modelSchedule.at$createAction (0, modelActions);0 j9 z! L( L$ Q2 u% u
! b) u3 B# \, x2 q. ^' | return this;# X4 L# Y6 m- r, a
} |