HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ t3 c! l& Y7 _" _# }. c: W: I5 K/ k1 M
public Object buildActions () {" K7 J; \. h' P! }
super.buildActions();
; ?# K- p2 ]' i; Y. p# x
% g ?# J& l" M/ D1 l) r // Create the list of simulation actions. We put these in' ]5 ], ]+ ?( Y$ t# Z+ R) p
// an action group, because we want these actions to be
* y; B- P8 U( `) v) a // executed in a specific order, but these steps should
0 L7 a6 p3 v* v6 q2 q$ D# ^ // take no (simulated) time. The M(foo) means "The message2 Q) g: U; {5 s# G
// called <foo>". You can send a message To a particular
) z* q5 Y& K* ? // object, or ForEach object in a collection.
+ Q, [! m: H Y* v' L 8 S- u% Z6 {1 k2 E: k l6 f* O
// Note we update the heatspace in two phases: first run6 u; W6 C& {4 g3 b
// diffusion, then run "updateWorld" to actually enact the" l7 c. h/ S' H" ~6 s# S) t4 g, T
// changes the heatbugs have made. The ordering here is
. @0 W Z" p, z. r9 R0 z1 v) q" V4 e // significant!# w3 \* |! E+ G/ R
1 g8 c8 e2 D. P, r! L$ g r
// Note also, that with the additional
- W0 y: e U9 k // `randomizeHeatbugUpdateOrder' Boolean flag we can7 `. _" x6 {2 v! ~: @
// randomize the order in which the bugs actually run
+ I- M+ @; m0 a, D5 l0 v! R- ^ // their step rule. This has the effect of removing any
: X, i. ]4 }( L6 O: Z* P7 a // systematic bias in the iteration throught the heatbug2 C9 b2 b, R/ ]+ V0 }# p
// list from timestep to timestep
) o0 i3 W! J0 b
# N. D+ k6 a# E% T) x2 B. V // By default, all `createActionForEach' modelActions have
* g; L: r% k% ^' P6 k% U# Q5 s Q- O // a default order of `Sequential', which means that the. t5 C' x9 D9 M$ ~1 M' Y2 L
// order of iteration through the `heatbugList' will be0 J4 y h, Q9 [/ U W8 i d: [
// identical (assuming the list order is not changed
, c9 j x! ]/ \* \7 v& u1 m& X // indirectly by some other process).
) }; J2 I ~+ e: q% v g
: ~" x4 A% S5 ^: D6 z( g3 d2 |$ Y9 s modelActions = new ActionGroupImpl (getZone ());
* Q0 g2 I. T1 \; l) _- R
! w' g! g% W h0 r. `4 v( z try {
" T; @& T+ L/ R3 N modelActions.createActionTo$message s; u# x6 `) o. y7 H' G
(heat, new Selector (heat.getClass (), "stepRule", false));4 ~, _; i% }# n2 [& e9 b
} catch (Exception e) {7 Y, v# w3 \/ S6 Z
System.err.println ("Exception stepRule: " + e.getMessage ());
, ]) B( q. \& S3 S' e0 } ?- L. m, N/ ^ }
- L9 g2 v: | @+ e; T
6 j1 M0 Q- G/ X try {0 U, t1 V3 @1 U- O! Z/ n' F% O; Z
Heatbug proto = (Heatbug) heatbugList.get (0);5 G7 d( i* h$ Y: P; W
Selector sel = : t! v; L s6 r& { o
new Selector (proto.getClass (), "heatbugStep", false);& X8 {- D9 j2 x- L! B3 a( h
actionForEach =/ e5 m) {; I; C4 ~5 K! Y
modelActions.createFActionForEachHomogeneous$call
! h5 Z6 I8 x: l( o7 r% T/ y5 t (heatbugList,
" i( Y6 g9 S; v/ c2 y! G new FCallImpl (this, proto, sel,* g c/ \4 q" g* k! q6 m
new FArgumentsImpl (this, sel)));
' c/ L& \% q) Y+ ?1 R4 p } catch (Exception e) {: {% L3 D3 N% L" e# P% P) F
e.printStackTrace (System.err);
! m. X1 L# }; V- g% Q, i& P }$ K( s: U, K2 ?" X& N
9 |3 q3 C5 f, S syncUpdateOrder ();! ~. m/ K! `* A |% O
0 O% [7 {: A9 C( m1 U4 R
try {1 |+ S; l0 i0 v5 R [# J
modelActions.createActionTo$message
) x G8 C$ d7 z8 A (heat, new Selector (heat.getClass (), "updateLattice", false));9 @- b% o7 K( t
} catch (Exception e) {
% V. \1 H# t u& [% @1 n6 } System.err.println("Exception updateLattice: " + e.getMessage ());$ a1 l8 B5 \# ^6 g# F+ u* H* s3 U
}
7 q% o/ H* ^2 `# e8 R' M
$ w' a# L$ f9 S$ {- C1 e // Then we create a schedule that executes the
- k, R. ^+ @, Y // modelActions. modelActions is an ActionGroup, by itself it' T2 o! T2 P8 x- I
// has no notion of time. In order to have it executed in
* ?$ r. ~* N( `$ d // time, we create a Schedule that says to use the y! i& e+ \) {+ R" E* p8 _( Y6 B
// modelActions ActionGroup at particular times. This
C' X N3 G+ | // schedule has a repeat interval of 1, it will loop every
+ Q. k* x. W, V% S% R // time step. The action is executed at time 0 relative to1 d6 X; S# j8 ]3 P
// the beginning of the loop." V Y' M3 r" a
. q2 r# |& M! i' Q( ]! L5 I1 q
// This is a simple schedule, with only one action that is
5 E% x0 f% ]% D: U3 R$ e8 T // just repeated every time. See jmousetrap for more
: I( w! {- y6 p- P* j" b* Q& W9 ] // complicated schedules.
, V6 W' ~1 v1 U
7 f7 s- Q# y. G. ]( N modelSchedule = new ScheduleImpl (getZone (), 1);- e: M! J$ M6 e* R0 o, e6 a; f
modelSchedule.at$createAction (0, modelActions);
( }" \( [$ G3 r$ o9 |# n) P7 F8 t 4 d" [2 m+ ^9 x! G
return this;
* G7 E3 t3 L: H: B0 L } |