HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! p9 d5 }9 E) I% J/ N$ I7 |. l2 I
?5 C; e' |7 c' R! f/ A3 @
public Object buildActions () {2 o) D# q* T6 @2 S0 i
super.buildActions();( o1 p9 o: N# [, Y
+ U! [( l6 E+ {! u% v5 E/ `) `
// Create the list of simulation actions. We put these in
3 x. _$ S n# F- i( g" q8 e4 t // an action group, because we want these actions to be' @6 z! c% r& c3 E8 V8 D
// executed in a specific order, but these steps should
5 T$ s6 s: i* }+ v7 ^- Y. S // take no (simulated) time. The M(foo) means "The message
8 f4 S6 L2 [( m" l5 T# e# S // called <foo>". You can send a message To a particular
0 c& p9 i3 }7 Q$ o3 F // object, or ForEach object in a collection.
. {$ d! y7 i9 S+ F3 s8 r* `; p & _- U7 R) D4 o6 z4 H
// Note we update the heatspace in two phases: first run8 ]: C. W/ E0 S& ~
// diffusion, then run "updateWorld" to actually enact the
/ J6 d) n& O: @9 \ // changes the heatbugs have made. The ordering here is
# T1 I$ o3 O" R( n7 {. i+ s6 x // significant!
5 R* V# n7 b0 e; n+ X5 q* G & X, ?. ^& M3 {0 D t3 }
// Note also, that with the additional o1 Y+ U8 m( R4 w, K- ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can" P% Q1 Y; w# v
// randomize the order in which the bugs actually run
. \3 A7 x2 R6 r# O9 { // their step rule. This has the effect of removing any
& S- a) b; K5 o' T1 { // systematic bias in the iteration throught the heatbug" j4 y# |6 b" F! m i: p; ?/ Y# W3 |
// list from timestep to timestep& b& O0 T9 v! I' {
K% x% V; L3 ~! ^3 i: l5 R/ J E" b // By default, all `createActionForEach' modelActions have
0 C& B/ g& r# F // a default order of `Sequential', which means that the, Y1 B- S/ H% U% K4 s
// order of iteration through the `heatbugList' will be
. o0 {) R3 y( v% g // identical (assuming the list order is not changed
$ L$ {8 v& C! B4 e // indirectly by some other process).
" c* I) p% r" k6 X- |: l( N/ f
9 T e- ?% U. q1 t modelActions = new ActionGroupImpl (getZone ());
9 H( v" u5 O4 F# ]3 F0 t) e4 h5 A' X8 t E6 ^& e+ z
try {
3 W: l+ y8 P5 }8 f2 z modelActions.createActionTo$message |" L: ~) v n" x4 t
(heat, new Selector (heat.getClass (), "stepRule", false)); L& S; f6 P0 u, I! G
} catch (Exception e) {5 k: g J: T3 K3 c5 C0 A
System.err.println ("Exception stepRule: " + e.getMessage ());
) C& `# p3 e P* | }' V, M& r6 W7 q6 Q; C
- o; _/ ]0 m8 U: A+ u4 [. U
try {
5 z1 E b$ l, G Heatbug proto = (Heatbug) heatbugList.get (0);
' k: |& I$ c9 y6 v! ]6 f( b3 E Selector sel =
. G+ @) O ~ b8 D2 J3 Y new Selector (proto.getClass (), "heatbugStep", false);) s2 ~3 E( U- Z1 T
actionForEach =* h0 w2 b( x" L) P& N' [& Z. z
modelActions.createFActionForEachHomogeneous$call
+ ?0 e! Q) Z4 W Q# | (heatbugList,
8 v: f3 h! f" N. H new FCallImpl (this, proto, sel,+ @9 ~1 Z J+ C
new FArgumentsImpl (this, sel)));
A5 u- B: K$ J3 u& E, u } catch (Exception e) {5 z0 W3 s, }9 I% r, L, d, v
e.printStackTrace (System.err);
8 n4 i. S, \( h$ w5 p$ Z }
7 d. G9 p) z. K3 m
$ X3 y- w0 H6 }1 @ syncUpdateOrder ();
6 }: n8 R& K2 G7 T: o
( ?2 x' G8 u+ Q& H3 C try {4 O8 k% F% P+ T
modelActions.createActionTo$message ( ^6 ~9 I% {5 w/ X
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 Q( D- m5 K1 `1 E- r6 ~ } catch (Exception e) {+ l8 D4 ~/ k4 c* S R* @! K, P
System.err.println("Exception updateLattice: " + e.getMessage ());
. r( _' A1 o% X- v# | }% J1 }0 t5 p; Y* G9 ^
" d5 m+ v3 A9 Z& S8 G" Y5 N( Y0 M
// Then we create a schedule that executes the/ Z1 ^, I; f" w% J/ J! b: }( ^
// modelActions. modelActions is an ActionGroup, by itself it O- q" ?# e7 Q( N4 z! q+ s
// has no notion of time. In order to have it executed in
% i0 M, r4 [' M+ |# `9 v5 b // time, we create a Schedule that says to use the* E' d: ]& z: B4 h- x7 u
// modelActions ActionGroup at particular times. This( l5 M, `" P# P
// schedule has a repeat interval of 1, it will loop every6 Q. f# }0 z, A2 s
// time step. The action is executed at time 0 relative to, J3 s+ k+ \$ r! D: z% `
// the beginning of the loop.
, Y/ R3 t0 o1 o$ t/ m) `1 z9 Q4 [* v# g# ~1 a1 R
// This is a simple schedule, with only one action that is) U0 f: K% x: ^" R& s6 `
// just repeated every time. See jmousetrap for more
5 g3 n" V0 v( g* q* I* X: z" U // complicated schedules.9 T( U1 N @8 P& G! Z* B
; L7 [+ F, `2 f! k$ Q( W
modelSchedule = new ScheduleImpl (getZone (), 1);
; ]5 q a2 Y1 W- [0 Z2 N8 Q modelSchedule.at$createAction (0, modelActions);
/ u/ z$ A9 k8 o* r 6 l, F( d4 X9 @# Z
return this;, W# W& J' u e5 R) {
} |