HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; x6 [5 ?$ g6 K
% w* \ a- r+ K) L7 v" L public Object buildActions () {9 X! Z _/ f2 w3 j1 I! p3 v
super.buildActions();* i; i2 e3 l( ~3 `7 n) X5 O c
) Q$ I* U' A) V4 A6 f2 z // Create the list of simulation actions. We put these in
' G3 G+ T$ X$ L3 X- k // an action group, because we want these actions to be; L& x1 p8 \* i3 k0 e
// executed in a specific order, but these steps should; D3 S7 ~" A; e1 x5 t
// take no (simulated) time. The M(foo) means "The message+ o6 s# y8 `3 ?& O
// called <foo>". You can send a message To a particular) O: i/ O A2 b0 F# _: K
// object, or ForEach object in a collection.
* i$ c0 o4 }2 b
, E) u8 \! j9 b$ C // Note we update the heatspace in two phases: first run
1 L3 y: R. ?! n/ I& @, i* \ // diffusion, then run "updateWorld" to actually enact the$ O% B9 x& n5 z" I! j+ K
// changes the heatbugs have made. The ordering here is
7 a9 b5 e( H& R' ]0 D+ A3 f // significant!% _; s* n0 D; E2 F# o
`" R- ^/ V1 }) m( D
// Note also, that with the additional
7 {' H1 {% c# w* \ // `randomizeHeatbugUpdateOrder' Boolean flag we can4 R& E8 d/ A* f5 T
// randomize the order in which the bugs actually run3 G( ?, k* b: L2 f
// their step rule. This has the effect of removing any
- u! a7 V! [5 ?2 ]* o // systematic bias in the iteration throught the heatbug; T, i2 K7 s( @0 i% ]$ H* l
// list from timestep to timestep
% |. }( A: Z4 U, x/ P
5 ]" A' ^3 t s2 e6 [ // By default, all `createActionForEach' modelActions have
& T Z7 y! C! G // a default order of `Sequential', which means that the& d( {6 ^4 a L; e2 D: c9 q
// order of iteration through the `heatbugList' will be, H/ @9 {, d* W! a0 ], _
// identical (assuming the list order is not changed
" P: J% p3 h6 j- ?$ o // indirectly by some other process).
& O$ m# ]! M% H5 C- J$ S . |7 Z) W' ~2 a$ Z# c* n8 `7 v# B4 Z
modelActions = new ActionGroupImpl (getZone ());
/ E+ {8 l3 R) V% v) m. C
; M& Y& S# i+ h3 M! N) ^9 U! } try {
7 h) W: {0 v1 X) q( r: o modelActions.createActionTo$message0 B5 B2 C; J, n3 B
(heat, new Selector (heat.getClass (), "stepRule", false));
" ~% z6 F) g) Y, w* e* o/ ~ } catch (Exception e) {! g4 j! a! k; ]4 u
System.err.println ("Exception stepRule: " + e.getMessage ());
* c7 h( T" Z" l, Z! L2 F }
% p5 I% ~ o% Q+ t) v# i0 B2 p; @; P- p. R6 M# Z6 U( k5 {2 m9 W8 ?
try {
/ Q+ q: Q3 Q% h6 H Heatbug proto = (Heatbug) heatbugList.get (0);# M+ T6 h& B& R" w! s
Selector sel = 1 j& F, P% t5 }2 w
new Selector (proto.getClass (), "heatbugStep", false);
/ Z( q, ^; Z% s0 r: W' K9 Q0 Y actionForEach =
, i# K! r p; u0 q modelActions.createFActionForEachHomogeneous$call
; a. a! `$ h1 c (heatbugList,
% o, y. t7 f0 N new FCallImpl (this, proto, sel,3 ~) h+ m# M3 I5 u% V2 Z* K
new FArgumentsImpl (this, sel)));
3 d L: P* j) a( } } catch (Exception e) {
* O9 i/ P! F( F+ I# G! g$ W7 m e.printStackTrace (System.err);
( j' H% W3 Z% m( M }
( [8 M6 L" Y7 S2 X7 p ( D2 Z$ }& {) e4 w
syncUpdateOrder ();* H L* a4 Y' Q/ H& y- v) Q
" F' `! E9 y( k) }( d
try {: n+ I, F& `( w2 a; m4 b! ~
modelActions.createActionTo$message % U; s' N! Q$ t( w `! }2 u \, g$ |
(heat, new Selector (heat.getClass (), "updateLattice", false)); x. K( x1 u1 p9 r8 |7 B" @
} catch (Exception e) {4 o/ F+ h5 ?1 S7 X) V* b+ Y0 F
System.err.println("Exception updateLattice: " + e.getMessage ());# m; {- {4 ?" a7 o9 u* z* N
}* z+ x9 f5 V/ l7 r* x
, J3 q* f2 @( s @6 k) k
// Then we create a schedule that executes the
1 w4 C' K; |9 V. n2 J/ N4 q // modelActions. modelActions is an ActionGroup, by itself it
5 r4 a* |1 B8 g6 K G) c% y( a // has no notion of time. In order to have it executed in( x; A( h/ b% ]
// time, we create a Schedule that says to use the
9 v. F; x7 i( ^; ?; ~ // modelActions ActionGroup at particular times. This0 s+ H% R: E4 b+ e
// schedule has a repeat interval of 1, it will loop every/ x! ^* a$ x: n8 v" e5 T
// time step. The action is executed at time 0 relative to: a6 }1 r0 N5 Z/ j# D$ Y
// the beginning of the loop.
. n; ~9 ?/ ? M8 s" V
& e% f* }+ `7 a // This is a simple schedule, with only one action that is( m# h( }( X' l7 t# k
// just repeated every time. See jmousetrap for more; _" s6 f# ~8 J( Z }3 Q' t
// complicated schedules.
$ b2 {, P6 h$ W; x U, k# O* k$ ?4 Y
& O' p; P, O0 T modelSchedule = new ScheduleImpl (getZone (), 1);
1 e- D+ R* F! A, p' Q6 k/ B% O. i modelSchedule.at$createAction (0, modelActions);
n# M2 L* Q# B3 N7 n # O6 q# P5 h! X8 J/ [
return this;
7 k( ?, M8 i8 _0 R: N" @1 Z } |