HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, F/ C# `7 P5 G
% H' J' O( _* O; K4 c* }% P( A( e
public Object buildActions () {
2 k( f5 G9 N& z# o7 b" t super.buildActions();
3 q/ g3 P% Q2 M+ c
9 ?2 w/ b$ p: T9 r+ R // Create the list of simulation actions. We put these in- B0 C' n C4 b" ?- ]
// an action group, because we want these actions to be
0 \- B4 r+ t7 b // executed in a specific order, but these steps should
, I. V- z# |) T w8 G$ t* ] // take no (simulated) time. The M(foo) means "The message0 ]+ n( T9 E' p+ ~" N/ v: |' w* x
// called <foo>". You can send a message To a particular' K# x9 u9 h; T: X5 f) j
// object, or ForEach object in a collection.
( g L) h2 \2 L% {; [/ D- K
. }7 M) K, Y. h+ [ // Note we update the heatspace in two phases: first run
8 D7 w L# n+ L; S // diffusion, then run "updateWorld" to actually enact the/ R( X1 L6 m1 }+ H8 R6 p1 m3 I# v
// changes the heatbugs have made. The ordering here is2 `" r7 q0 B: y G3 y$ A
// significant!
4 w! z- R% H: k9 i( T4 z # W; I4 Z, k5 E9 q7 u
// Note also, that with the additional$ r) m- q; i+ J
// `randomizeHeatbugUpdateOrder' Boolean flag we can( V' M# {( E1 C# {. U( H* F6 a
// randomize the order in which the bugs actually run5 k% ~) P, Q, i5 T% D
// their step rule. This has the effect of removing any, B$ _, e" z2 Y% ^, \5 Y
// systematic bias in the iteration throught the heatbug
8 p, r0 S5 u! \/ W // list from timestep to timestep
# |0 N M% @9 G# ]# V & N/ ?! r2 @; q) I
// By default, all `createActionForEach' modelActions have6 P- y6 V* O ]4 w4 A# ^* p
// a default order of `Sequential', which means that the/ Z) } B( N8 f) s* {( ?
// order of iteration through the `heatbugList' will be1 ]1 i1 ?7 b4 {1 e# Z& j. R
// identical (assuming the list order is not changed
- G2 G( a3 p9 h$ E3 M // indirectly by some other process).6 y' Z6 c3 X/ }8 V. {
9 ^- `0 y8 c k g2 H: Y R
modelActions = new ActionGroupImpl (getZone ());
% P- z; r, Z( Z- x7 @) ~+ |
1 f- T$ X# a4 n* Q$ D4 d try {( t1 Y) O; q% M& D8 C) D. y
modelActions.createActionTo$message
, {% }6 ^" @# J1 ` (heat, new Selector (heat.getClass (), "stepRule", false));
' B3 d9 o; M( V0 e& P } catch (Exception e) {
/ e l0 ` h5 w& |+ z System.err.println ("Exception stepRule: " + e.getMessage ());, }! C/ Q* {, M% s6 w/ L8 S
}7 o; U! P3 S' G" g
9 y- {; N8 N3 E6 K+ G
try {7 A% v/ x+ z$ o5 h. D
Heatbug proto = (Heatbug) heatbugList.get (0);: q9 T9 k" V0 u4 W$ ^ ]: T2 m
Selector sel =
! V0 n; q$ H( z) K, y new Selector (proto.getClass (), "heatbugStep", false);0 l3 A% A7 ?% i7 V) c4 P
actionForEach =
3 P1 D8 y# K( v- q modelActions.createFActionForEachHomogeneous$call
* u1 ?! c! u8 N4 v5 N7 c (heatbugList,8 [% O% A3 w6 X
new FCallImpl (this, proto, sel,
2 M: a( {* L- V3 n* T. A new FArgumentsImpl (this, sel)));8 g, R* `5 L, }. J: G
} catch (Exception e) {7 H2 r/ e9 e; a
e.printStackTrace (System.err);
# z! K4 f; R4 ]2 v b* u( ? }7 t& m* H; t" w0 Z, E9 x
6 h" A& \! J0 k syncUpdateOrder ();1 _; I. b" |0 s
8 F9 m. g1 N& z7 i+ a4 D# a; X8 C# M
try {
* ]$ G: [ l( M" I- _2 n' c modelActions.createActionTo$message $ Y+ A% E( {8 ~& l9 T
(heat, new Selector (heat.getClass (), "updateLattice", false));
( B1 I" n3 H* D9 F3 Y! G; s4 {4 D- m } catch (Exception e) {3 j6 y# K' q) @" X
System.err.println("Exception updateLattice: " + e.getMessage ());
( Q/ E/ j( A( C2 i }
6 V% u+ J2 o1 S! M/ w
. }0 b# D6 J+ a. P- [! f: W // Then we create a schedule that executes the5 `4 ]6 |3 w r
// modelActions. modelActions is an ActionGroup, by itself it. y+ f; D3 D2 N
// has no notion of time. In order to have it executed in$ a& x5 s4 u0 B) a9 \
// time, we create a Schedule that says to use the6 v" G( T9 K }5 {9 b
// modelActions ActionGroup at particular times. This
0 P/ R3 v) p' r- W, S4 X* W // schedule has a repeat interval of 1, it will loop every9 G* F5 y8 t- @9 w9 v
// time step. The action is executed at time 0 relative to7 z: E# P% d) ]& p; ^: k& s# U
// the beginning of the loop.
; n! u: @, t" |! d/ g" X; q/ n) W. {# T# | |2 `5 H6 K
// This is a simple schedule, with only one action that is
) O/ {4 i9 T$ q; ?% V // just repeated every time. See jmousetrap for more
0 N( U$ z9 k7 F% x // complicated schedules.
' t' y, d4 t7 h0 g8 M: o7 L7 ] 9 s) E7 T) u; h5 T2 p
modelSchedule = new ScheduleImpl (getZone (), 1);1 a& }" J+ S0 z- E' ` j' B8 k) z
modelSchedule.at$createAction (0, modelActions);
* m& s9 ~0 a# v8 D" ]
# \9 o+ P% W# @ Z2 Q/ `1 B; K# c return this;$ }8 K2 n/ g; G9 c4 B1 D7 x
} |