HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% I ?! Z6 @9 {
( `! m/ L+ C0 x2 {
public Object buildActions () {
/ i5 L4 S/ e0 ~* W1 T/ L+ _* {) q, I super.buildActions();. _# T4 \+ O c9 l* J/ S
& {$ p: Y! t2 w$ D- H" o
// Create the list of simulation actions. We put these in
- v9 j1 s; e p( G a5 G( x5 J // an action group, because we want these actions to be
+ Z& v8 u3 S6 Z0 | // executed in a specific order, but these steps should
# ^- D# X. R; E2 z // take no (simulated) time. The M(foo) means "The message
% }# E4 A3 A3 u- W2 j& K. [ // called <foo>". You can send a message To a particular
% B0 D3 K* `0 R" h; a: m // object, or ForEach object in a collection.
4 I# \) U' e2 d$ V 3 i) i' G5 x+ E4 X5 D5 y
// Note we update the heatspace in two phases: first run
+ z, E9 c3 {; _3 r // diffusion, then run "updateWorld" to actually enact the9 C& U) h) B0 N( F
// changes the heatbugs have made. The ordering here is$ C6 K' ?. U8 G8 b. F, M* m
// significant!& Z* b3 Q p5 F+ N: V" w7 B
5 c3 E7 Z6 }5 u, o // Note also, that with the additional
$ H8 s; q: t* o# a9 d* c // `randomizeHeatbugUpdateOrder' Boolean flag we can
! Q7 O: ?/ K" s8 e, m // randomize the order in which the bugs actually run. O" _- f2 ~) U% \
// their step rule. This has the effect of removing any& |6 X8 K/ @8 B% O- S. @
// systematic bias in the iteration throught the heatbug
& [5 }8 @8 q" B% O) g // list from timestep to timestep
6 n$ Y6 @; w- \" | 7 V9 ^1 [ Q- }4 F" H
// By default, all `createActionForEach' modelActions have4 ]: J9 E! A- C+ M
// a default order of `Sequential', which means that the7 w$ j+ s+ y" f/ Y& V
// order of iteration through the `heatbugList' will be+ V; e1 t$ x+ ?6 [
// identical (assuming the list order is not changed
& e) ~$ F1 @- o8 d, _ // indirectly by some other process).
) w4 Y1 ^3 V+ n" p3 l
7 t8 m( W- c1 e7 k modelActions = new ActionGroupImpl (getZone ());
5 K0 ^/ p6 j" `# ?" l: j7 b1 l1 S6 C' Z! ^. D u. z% [4 S$ ]
try {
* O1 I; |, U/ k% V modelActions.createActionTo$message
' b l. A9 b! V( k2 H E! D1 k (heat, new Selector (heat.getClass (), "stepRule", false));
W" ?; |# ^! T1 ^) [9 ?+ [, { } catch (Exception e) {
1 T( T1 j. k/ g System.err.println ("Exception stepRule: " + e.getMessage ());! _5 h: w1 K o) P! s0 m; S5 \
}
. f* M4 D9 O, O4 V) c4 u
5 P( g M; D, r+ }) R( A try { |5 ?1 q$ t1 |9 X) R" J
Heatbug proto = (Heatbug) heatbugList.get (0);
$ `5 ?9 A4 y: c( T n: A Selector sel = & P4 B- C7 P6 m5 V: \- |$ ~* ~
new Selector (proto.getClass (), "heatbugStep", false);
6 j) i! _9 ] A/ b9 x# [3 t actionForEach =9 b5 B* D& r4 f$ U' L/ Q" @, I2 h# E
modelActions.createFActionForEachHomogeneous$call, ?- h/ f) s4 {" |( ^" w a
(heatbugList,
) \; u0 v. h. `8 p new FCallImpl (this, proto, sel,% j. D0 @1 t, O! F- g: U0 K5 k
new FArgumentsImpl (this, sel)));
. K- M( R* e, k( }: E @ } catch (Exception e) {
/ q. u8 t, B- L1 w' d e.printStackTrace (System.err);. L+ s; ~6 f d
}8 V" v% I- ^5 h* B% x
' u8 a& N/ O+ M4 A L
syncUpdateOrder ();
% I) q3 X5 r5 f D
( Z, {7 _* s ?. y& a try {
, |1 I. `3 a- K$ n# O+ W( W) y modelActions.createActionTo$message , c. D& @3 y# C3 x# |5 Y( [
(heat, new Selector (heat.getClass (), "updateLattice", false));( i3 m9 D% L8 i/ h. j4 m7 K
} catch (Exception e) {
" E; |, }. G8 E; P System.err.println("Exception updateLattice: " + e.getMessage ());: p* Y( S' M t1 a7 x5 W c% p
}
, a* d% B" W: _$ h& ^! Z7 l
; @9 n# W s9 c6 k // Then we create a schedule that executes the, W' k; y3 |! p9 T: T5 d$ o
// modelActions. modelActions is an ActionGroup, by itself it" Y$ c1 c0 s+ M7 Y! E2 A: Z+ `' j
// has no notion of time. In order to have it executed in
; B1 }- Q. A, S% Z' m // time, we create a Schedule that says to use the. t3 ]8 o) X6 T+ C/ l
// modelActions ActionGroup at particular times. This
b9 I( X( B: a/ t // schedule has a repeat interval of 1, it will loop every
; m2 p5 S& b% e5 Q0 N. l // time step. The action is executed at time 0 relative to
8 H$ V5 j2 l. s9 I // the beginning of the loop.7 l. z8 Z, z$ K: p! d: y
" X( _: ]1 a) x
// This is a simple schedule, with only one action that is
8 i9 E* C3 q+ u3 L8 G; x0 a // just repeated every time. See jmousetrap for more- A3 a: y6 [0 Z* d) c9 }
// complicated schedules.
1 B: Z/ { n6 \
8 l5 ?/ H+ ^8 ?7 A6 K" ]+ q+ L# X modelSchedule = new ScheduleImpl (getZone (), 1);
$ E! {+ |4 L; l. ~& N( U modelSchedule.at$createAction (0, modelActions);% D8 f% G& f$ @6 { O& v1 O
+ w' r; z* h, I1 L( j) Q u return this;
# c- {- H0 ?! v7 ]% Z- S } |