HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. z7 J) ?8 P: }8 h' i* R5 z7 k) ~! Q: d; S; J! H
public Object buildActions () {
8 g( l! j7 K) s$ o super.buildActions();
0 I( @' _/ l9 E6 x6 [9 I. I 2 G0 A+ a H' n8 v5 v* d2 y% a7 T: x
// Create the list of simulation actions. We put these in
( Z+ x" |9 j- M8 E( j% D // an action group, because we want these actions to be2 ~: B) @. W1 e* r
// executed in a specific order, but these steps should
# y, t. N }7 k. D* n# l( S% t1 E // take no (simulated) time. The M(foo) means "The message
0 r% {& @2 B: u; }; I) ^& f // called <foo>". You can send a message To a particular) O7 B4 u6 M/ U# p
// object, or ForEach object in a collection.
) m! ^6 e6 u9 h- ^8 N
4 D: Q" `2 |) _ I2 b // Note we update the heatspace in two phases: first run% d/ D# U. k+ k) s1 M
// diffusion, then run "updateWorld" to actually enact the/ h+ @' B% l' u
// changes the heatbugs have made. The ordering here is9 H9 B8 R) D, P% E2 b/ M
// significant!
. t5 ]; Y, c/ a% ~ ; u6 b0 i) Y3 T) A; J" N& n' M3 t
// Note also, that with the additional
+ K6 c) s- R' a* [% g* i1 Q) `: R$ d; { // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 H9 f) z$ z! [0 k" J) c3 g% z // randomize the order in which the bugs actually run6 E P7 y1 y- @" w
// their step rule. This has the effect of removing any* O7 H3 c8 j4 A9 A6 `# F
// systematic bias in the iteration throught the heatbug# W! i' U" W! `
// list from timestep to timestep n9 Y/ j2 V! k' t5 ]$ v6 h% b6 k
: Z& F* X& }, M& n7 i) ^/ u* R1 e
// By default, all `createActionForEach' modelActions have8 B* @7 s/ {" n: b! ^
// a default order of `Sequential', which means that the) X# @6 @2 r$ N1 [: v
// order of iteration through the `heatbugList' will be
5 |% w% o5 }5 P5 W# i5 }" A // identical (assuming the list order is not changed
! [) F% `- j) n& u5 O // indirectly by some other process).$ }8 i, a, z- b& e5 o+ q2 ]) b [$ `+ f
1 s7 S- h0 u2 P4 N5 {5 z modelActions = new ActionGroupImpl (getZone ()); j1 V. q6 l7 u$ ]. T: J+ X5 h3 t4 G: o
7 m+ B8 p* A! U try {
5 I. j7 }. l+ H9 f# g* M modelActions.createActionTo$message2 Q2 u& h' D: A* o: B3 t a4 \; o
(heat, new Selector (heat.getClass (), "stepRule", false));
' f% ^$ o8 ~2 J/ n9 P' V) T } catch (Exception e) {7 J) W4 T! L; y) a ?
System.err.println ("Exception stepRule: " + e.getMessage ());3 a. L# b% ^" y* i' S
}
% t. c9 ~# j) G3 e
4 U# H# n# n1 W5 @1 \# o2 C$ [/ ^ try {
k: t) j% g: `2 ?0 |8 x9 T Heatbug proto = (Heatbug) heatbugList.get (0);* P6 u! A9 F. W6 B& K! I
Selector sel = ; a$ F0 p8 U, N) e$ E, s0 R
new Selector (proto.getClass (), "heatbugStep", false);
Q+ c w7 L/ P* I; u$ O+ A: D actionForEach =& V5 n' C2 g4 x& t( x3 z$ P$ t
modelActions.createFActionForEachHomogeneous$call
6 B1 n; {* `- f% F6 ]5 S (heatbugList,$ J: N v" \+ p5 Z+ @
new FCallImpl (this, proto, sel,
' ]% u' @0 h6 k% ^7 t new FArgumentsImpl (this, sel)));
' B" N4 W5 L/ c# ~: g } catch (Exception e) {- U6 J6 x1 t( g- }$ L
e.printStackTrace (System.err);+ ^! P3 w( z5 F6 @8 t
}6 F9 R& O$ E* X6 y* I) |
' K/ P! S+ A2 x/ @' I& V( ~! S
syncUpdateOrder ();
& y! s- t( l; o0 f2 s% k) B, T
7 J8 y; [/ X" p2 Q' z+ j, Q; V try {- R2 m5 e0 z2 Z: @* V
modelActions.createActionTo$message / ]# T# Z& Y) X7 n6 }& y. {
(heat, new Selector (heat.getClass (), "updateLattice", false));1 h7 c' F: I. D" f1 i$ h
} catch (Exception e) {! }7 [! D: `! Z! e" N
System.err.println("Exception updateLattice: " + e.getMessage ());( m6 J+ ^! i: @/ B
}/ m0 G! |/ Z7 _
1 R! C0 g) Q! D7 d' f2 s3 @6 R
// Then we create a schedule that executes the
) D8 y; H3 y4 F // modelActions. modelActions is an ActionGroup, by itself it
$ D2 L7 E% ]7 T7 H% f6 c" f // has no notion of time. In order to have it executed in
- F. X) ?! l. j( Q' V, t7 ~7 V // time, we create a Schedule that says to use the
$ t6 @& B* g4 k( Q0 s! v4 P6 ~ // modelActions ActionGroup at particular times. This
) m5 A4 z/ U( Z$ {% B8 u // schedule has a repeat interval of 1, it will loop every
$ Z1 y l S, h) C3 e' `1 W. d // time step. The action is executed at time 0 relative to
$ Z5 y, d: b6 x4 R, y: k5 P5 L4 r // the beginning of the loop.
5 |) A6 @, \2 J8 H! m$ n" R! H' E* `' z8 R- K8 {' U& ?+ a* O
// This is a simple schedule, with only one action that is2 f( E1 j1 q6 H! n: u, q3 l+ J
// just repeated every time. See jmousetrap for more
# }$ {, c; g6 o' e' j# S // complicated schedules.
" F: ?( |3 G3 I3 _
" W5 L# y# x) N! r7 K modelSchedule = new ScheduleImpl (getZone (), 1);9 |# c4 h9 W- S' {
modelSchedule.at$createAction (0, modelActions);
& u$ |) a) `+ P' O+ ~ . f5 l4 v5 \, ]2 s' p4 [- |
return this;
$ x: r1 t- e- |3 e } |