HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ K# T. h. X; x) r5 `. |0 D
' H6 r$ z0 V4 C) g) _
public Object buildActions () {, T2 O$ G6 A4 I" F: T: r
super.buildActions();1 A4 `: K% h1 N3 Z$ R
$ l% [2 Z0 P7 _8 I+ H" S. ?
// Create the list of simulation actions. We put these in \5 C7 v _4 L/ x
// an action group, because we want these actions to be- }1 B" W) g) r- `/ z: h
// executed in a specific order, but these steps should
: z4 G. N) M$ B // take no (simulated) time. The M(foo) means "The message
S/ q+ q1 Z& L/ }/ P, Y // called <foo>". You can send a message To a particular6 t6 s0 ]2 |5 C$ n
// object, or ForEach object in a collection.
% {8 x$ U7 p+ N+ e: R) a
0 b& i0 p o- g0 s // Note we update the heatspace in two phases: first run
2 @1 H$ _4 K4 d' h/ {. s, g; s // diffusion, then run "updateWorld" to actually enact the, N( V3 ]# j5 ?
// changes the heatbugs have made. The ordering here is) `6 e7 ?. b3 b0 q5 ]
// significant!. W+ F+ m" }" k% {
" e3 w2 e" t+ q6 X7 j
// Note also, that with the additional
! w# Y# ?0 H& k1 D+ C: G* | // `randomizeHeatbugUpdateOrder' Boolean flag we can; T9 i; O$ u) D3 h" l
// randomize the order in which the bugs actually run e" U! L8 K5 o+ v7 u
// their step rule. This has the effect of removing any8 r9 J( M( |/ O4 c3 e) s
// systematic bias in the iteration throught the heatbug
5 J+ _' k4 u8 c+ r% f& A // list from timestep to timestep. M% @# Z- l/ o2 {
* _" G% x0 r! Q- M( ^ // By default, all `createActionForEach' modelActions have
" K. A Y9 Y* H% H- R // a default order of `Sequential', which means that the
8 C B+ C9 b" Z1 Y+ h // order of iteration through the `heatbugList' will be2 v* g, N# V- h: z% K. O
// identical (assuming the list order is not changed8 k& }3 t2 h: U7 l# z/ a+ k
// indirectly by some other process).% `, p5 W# e: |* o x; N
3 J9 r% ]) k( S4 S
modelActions = new ActionGroupImpl (getZone ());
- g# z8 ]) A" i8 F% X6 m2 ~2 N" V* L, i% x7 z) v) U
try {/ C& F$ @" T. i+ ?
modelActions.createActionTo$message
# w2 x* ?! J* e; a1 f (heat, new Selector (heat.getClass (), "stepRule", false));% Z8 l+ j% z) c- U: a; [: S
} catch (Exception e) {+ ]0 I! T) k k9 e( t
System.err.println ("Exception stepRule: " + e.getMessage ());
1 r# r K" @2 I" b7 E' R }7 Q" c3 X) C1 m+ }& q
% y$ N5 ?; p! v4 n9 A try {& x! v, \( S2 \$ {4 W9 R
Heatbug proto = (Heatbug) heatbugList.get (0);& F& e4 f, n) Y% M
Selector sel =
7 j F# T) X% | w new Selector (proto.getClass (), "heatbugStep", false);: [7 Q9 J/ D4 G$ h" l0 E
actionForEach =
; }8 y4 h2 n: S T/ { modelActions.createFActionForEachHomogeneous$call
# ^# @, v2 j" Q E# O3 l" P" H (heatbugList,
# w b" p, _8 Z* D' u* q3 H$ v! W9 i new FCallImpl (this, proto, sel,
) W+ ~( T$ R' d new FArgumentsImpl (this, sel)));: y8 I) B- n" `, w- Z) }
} catch (Exception e) {
7 {, |; O5 Y, Y: ~6 U; i M e.printStackTrace (System.err);
. c' |- ~( o+ W: w }
# {* v. }& \2 R
8 _$ S/ M3 `0 M5 B4 s syncUpdateOrder ();
3 j% c+ ^+ g- g& B8 W: `% J9 ~- ^
try {
5 _+ o3 g& [3 L! O# H% w modelActions.createActionTo$message
0 s/ i5 Y3 \! z4 A, t0 w3 k( F# a (heat, new Selector (heat.getClass (), "updateLattice", false)); I4 m" W: ` A: i7 Y
} catch (Exception e) {8 f! o/ o# k% B. ` y
System.err.println("Exception updateLattice: " + e.getMessage ());
& U' E" d; k9 g }" G. o, J0 q6 ]/ z
, O$ S- c+ U* G4 @3 P( c // Then we create a schedule that executes the, k o# `8 b# j1 P1 X# B6 h
// modelActions. modelActions is an ActionGroup, by itself it
* V4 Y2 S5 L W1 \' G // has no notion of time. In order to have it executed in
. w: `* P" y B& ^, \) h // time, we create a Schedule that says to use the
) P% V$ P8 t& [ // modelActions ActionGroup at particular times. This# }+ F! L! j1 x( w# d8 o
// schedule has a repeat interval of 1, it will loop every6 d6 i4 U4 X0 ?5 y* ~) U( \
// time step. The action is executed at time 0 relative to# F" G6 l6 U* |- I0 ?
// the beginning of the loop.
9 {0 U; I$ x9 U9 Q* {+ u2 I; E V- F2 R
// This is a simple schedule, with only one action that is( R1 m) |1 f8 v% L
// just repeated every time. See jmousetrap for more9 L: n6 S! E/ G- |# @% t) ] t: D
// complicated schedules.
3 c& x& L' A" B& a A2 J
! b: V+ Q- C T$ ^# G& X% n B modelSchedule = new ScheduleImpl (getZone (), 1);( } s9 s2 z& q) O+ j
modelSchedule.at$createAction (0, modelActions);& F/ g# Z9 f) m" ]2 V* K5 p
, z' k* o* a3 J( X- _# ? return this;# g' L3 b" W8 R# {# r
} |