HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, O0 j+ e" t7 U! S7 b
, Y2 u3 F* e; \6 W. X% t public Object buildActions () {) q9 Y7 {" ~" e' F
super.buildActions();
1 h0 ]6 A# _0 y6 U7 X ; C: P. ~- u" }5 A4 T
// Create the list of simulation actions. We put these in
7 _( h! o. ?# ~8 Z // an action group, because we want these actions to be
- A0 ~* g7 J: l4 U' f$ o4 V @ // executed in a specific order, but these steps should& V( p% t# o8 `1 L8 i8 b+ \
// take no (simulated) time. The M(foo) means "The message
! M3 }% r: l0 Y( x( ~ // called <foo>". You can send a message To a particular
" z: Y. N" f9 _0 T" d // object, or ForEach object in a collection.; E# @, h0 L5 }
* `* y: F* z4 Q8 ]8 r2 F( j // Note we update the heatspace in two phases: first run
, M5 `$ O! M( a // diffusion, then run "updateWorld" to actually enact the" b; @' \& X! H' g
// changes the heatbugs have made. The ordering here is: a v5 e) j, g: F" p
// significant!6 q: S7 C9 U a
! z; q, s' R% h; V# d
// Note also, that with the additional6 R* b5 g5 S: C& b
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ Q' F) V$ u# v0 K
// randomize the order in which the bugs actually run0 \8 O. c0 L: Z' }) J- Q" q
// their step rule. This has the effect of removing any6 y7 N7 B/ u8 D: Z" y$ a/ Y
// systematic bias in the iteration throught the heatbug
/ U ~4 r* ]: K! ? c // list from timestep to timestep
- {$ b. i% r& U1 b , ~2 h9 W4 J, N, L* D
// By default, all `createActionForEach' modelActions have: u, g7 A2 z1 g5 v3 p
// a default order of `Sequential', which means that the) z# N T& d9 G
// order of iteration through the `heatbugList' will be
+ y+ `& D2 b7 s5 M // identical (assuming the list order is not changed5 x: |9 X6 N3 H5 }. U5 {: ~
// indirectly by some other process). k5 k! p, Q5 b$ o# I
+ \$ T- S$ p2 u- L: {# p
modelActions = new ActionGroupImpl (getZone ());& z* F" X9 Z' ~' }
# m- ~3 n% @* q+ L, _" Y try {+ h7 F3 W( [. H8 s0 _9 q
modelActions.createActionTo$message+ S% Q' ~5 o8 ]- W. t" H/ Y1 ]" }
(heat, new Selector (heat.getClass (), "stepRule", false));) ^; e) m6 `( j0 {; K
} catch (Exception e) {4 }" F$ s& @) h( {0 P
System.err.println ("Exception stepRule: " + e.getMessage ());; n1 N0 z4 n4 { J
}
: n) s: R' b/ r# Z% b/ k! q9 v c3 U6 z* a
try {$ H" F% B L. d% g7 U
Heatbug proto = (Heatbug) heatbugList.get (0);
( n5 [/ \# D+ p: u, l: i! O Selector sel = ' c; a! I- n# k$ Z9 h
new Selector (proto.getClass (), "heatbugStep", false);5 X( D5 t8 H* o1 l
actionForEach =9 e9 u$ `& [1 |+ v4 A! x: @2 c
modelActions.createFActionForEachHomogeneous$call
3 O5 L3 ^0 H, A- T6 t (heatbugList,
" Z" o I& S6 `- k' B1 E8 v- O6 J new FCallImpl (this, proto, sel,
3 |$ _5 q/ b# g ~) j' B1 e( q new FArgumentsImpl (this, sel)));, R. I. q5 A- H
} catch (Exception e) { @- \+ |; C2 ^# {5 F
e.printStackTrace (System.err);$ f' P* }' P9 ?1 k
}
% ?' f8 { R; s1 |+ ?
8 ?4 Y+ ~7 M* w syncUpdateOrder ();
' ?/ v) J! }- F$ t3 u4 b( O( ~) a& X* a6 w- D
try {
! o2 O$ ~5 [8 Z" \2 |- \0 Q8 a" N! Y modelActions.createActionTo$message ( v! s1 U- d: V5 H; Y9 b
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 [, G6 @# U( A$ A } catch (Exception e) {
7 v3 I; W: b$ f- ~ System.err.println("Exception updateLattice: " + e.getMessage ());
- S; x" L! r M" z6 M2 O }
. o0 j) O0 h. J/ g1 i, c2 Y4 ~ + x. A# _$ J/ J' ?. W
// Then we create a schedule that executes the# i* } A6 j# e7 H, p( k. f6 V4 ?
// modelActions. modelActions is an ActionGroup, by itself it
% x2 f! w! E4 G5 w // has no notion of time. In order to have it executed in
- M3 n z4 o$ i; n' p% F // time, we create a Schedule that says to use the
% _5 ], v, a1 \' ^" a$ P7 m1 p // modelActions ActionGroup at particular times. This
8 _* ?) Y; t4 `9 T // schedule has a repeat interval of 1, it will loop every- b/ Y6 T L* j! ~
// time step. The action is executed at time 0 relative to/ H* r! e8 a1 g% S5 c
// the beginning of the loop.
7 s7 v/ e4 m2 {8 B7 r) }7 l6 w4 c
' [& d" ]. U( e! B3 Q // This is a simple schedule, with only one action that is! j8 g! A; ~/ G) N/ I) e3 i$ B6 G
// just repeated every time. See jmousetrap for more5 Z( D* Q) }) p* ]1 Y
// complicated schedules.
2 e/ i) K6 n/ a# Z6 h# R0 A @+ g9 C1 f
, {$ i' ]( P5 u modelSchedule = new ScheduleImpl (getZone (), 1);8 M U; S+ X+ t6 i0 S' k2 |
modelSchedule.at$createAction (0, modelActions);6 ]: Q% @. w8 P% L+ [' ]) o
3 k* n, Y4 y4 @/ U/ N
return this;
, J f7 Y F E6 E5 _ } |