HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 ]! x+ V9 m3 H( x9 i% ?
7 Q [5 [& ~- b public Object buildActions () {* g) D+ P3 [+ k B% D+ @0 i
super.buildActions();
( A9 p, L5 y; |2 c
1 g4 ^8 f- r- e7 H* U0 J; z // Create the list of simulation actions. We put these in2 z* O4 K# ?4 O
// an action group, because we want these actions to be4 Q6 ~' o- u% s
// executed in a specific order, but these steps should
& u8 p% a3 S1 D P // take no (simulated) time. The M(foo) means "The message
' P9 ~4 U3 @2 } // called <foo>". You can send a message To a particular
2 ~/ T8 P. w, g; |% I* k // object, or ForEach object in a collection. U$ ?# h: R1 v1 U0 u$ D% C
8 \: | c" ~5 ^' q5 F4 E
// Note we update the heatspace in two phases: first run2 `8 Y) [2 v% q- m
// diffusion, then run "updateWorld" to actually enact the
$ M9 Y0 ~5 j8 j+ R- M$ G9 S/ Q3 r // changes the heatbugs have made. The ordering here is% h9 S3 k* r/ B `) N# X+ M
// significant!7 T- f' ]$ x; e$ o& U0 |
7 C8 q3 Z. x4 q) N: j" t t // Note also, that with the additional1 J! D8 x) z# P# v3 ~+ B0 y- p8 M" b
// `randomizeHeatbugUpdateOrder' Boolean flag we can" v4 i; {7 T# t8 A5 R
// randomize the order in which the bugs actually run, G9 {, Q# G# `. J. q2 Z
// their step rule. This has the effect of removing any
. y7 H( q: h+ e // systematic bias in the iteration throught the heatbug
% }: o0 _1 z# U // list from timestep to timestep8 W# n: B C p
% |, ?3 l3 E$ G ^! x) H) n* z // By default, all `createActionForEach' modelActions have
9 p! S, L/ Q; |' a: L) O // a default order of `Sequential', which means that the
* n+ u. e7 I/ s( a9 ` // order of iteration through the `heatbugList' will be
0 U# K; Y% ~5 T // identical (assuming the list order is not changed
6 K6 ^- M& e3 U // indirectly by some other process).
$ n. N; q) |3 z2 [3 I) K 4 W& j8 R0 u8 S; m: o$ X3 C
modelActions = new ActionGroupImpl (getZone ());7 O# E; u2 B) |& C# q0 ]9 d
; X2 p+ }2 Y. V( H; K4 F2 H try {8 a' v- T3 k/ F
modelActions.createActionTo$message
# `% c6 [; Q7 U3 M, j9 C (heat, new Selector (heat.getClass (), "stepRule", false));5 B% n; o9 D6 |+ m) R4 N1 f1 o
} catch (Exception e) { z; I: B* [' C( M* @2 s
System.err.println ("Exception stepRule: " + e.getMessage ());
! v0 S9 \6 H. P H, V3 [ }! ~/ G- A8 I8 B# u+ v5 J5 D
4 {, C4 I, D# O. @* g* q
try {! j* y, f$ ~ B, l
Heatbug proto = (Heatbug) heatbugList.get (0);
$ T3 c3 ~8 D0 v1 j, E6 ]- D: f% P Selector sel = 8 \6 ^" I8 q( \: X8 r
new Selector (proto.getClass (), "heatbugStep", false);
( Y; @9 X Z9 S actionForEach =1 e* j6 Q- _5 ?4 E( R/ ^
modelActions.createFActionForEachHomogeneous$call4 U. a& C# k9 C
(heatbugList,
/ z$ G3 {! ^# L0 I/ M2 Z6 V; V new FCallImpl (this, proto, sel,' S7 J) F# |) A& P: K% Q. s
new FArgumentsImpl (this, sel)));- R: K+ X. e$ T8 ~% L
} catch (Exception e) {
2 r- H$ `" A2 ~* R! q" N e.printStackTrace (System.err);
7 e& l. s7 O) d6 F: G/ w+ Q }
4 u+ D% P, |5 p1 \# ?0 a* U1 Z . j' e$ a7 q4 C' S
syncUpdateOrder ();7 X) }8 Q% c$ w" p8 M
* A9 ]7 f0 D% z( U0 } try {
$ X i' R! F( o/ F( ~! ` modelActions.createActionTo$message & |4 I& c! J! l# V( ]- s! u
(heat, new Selector (heat.getClass (), "updateLattice", false));$ d. Z$ B, h5 B$ l
} catch (Exception e) {' M5 P2 F2 p4 N8 r2 J
System.err.println("Exception updateLattice: " + e.getMessage ());
, ]( {1 ~+ {: U' L: [9 I }
2 f; k! s- d& P q3 F8 D 0 r1 t8 K C T: {) n$ @% z
// Then we create a schedule that executes the' \+ T: T# ]- N/ F7 v9 @
// modelActions. modelActions is an ActionGroup, by itself it6 ^" n2 {. G$ ^/ v! P
// has no notion of time. In order to have it executed in
' x; @" B$ a F6 \# O/ e5 o" P% W, g& m // time, we create a Schedule that says to use the
2 Y' e0 d7 O: J // modelActions ActionGroup at particular times. This
1 R% X ]* x; R7 h7 R: g% v7 o0 I // schedule has a repeat interval of 1, it will loop every1 n* e$ C; h2 l- R1 k0 y
// time step. The action is executed at time 0 relative to
2 s$ D2 v) ?; M // the beginning of the loop.) K. d: B2 V; _" e6 h; o6 C9 D
5 G" z+ f( q, Y P, U4 d! @9 i" y
// This is a simple schedule, with only one action that is
* k9 K) n2 r8 @8 O // just repeated every time. See jmousetrap for more
* g$ L3 `& b! @! ?5 |3 ` // complicated schedules.
w, ^0 ~: Y- s. F- }$ E
/ b" k7 j- Y) j+ ` modelSchedule = new ScheduleImpl (getZone (), 1);" c. j) ]4 f& j, M" [& c( {
modelSchedule.at$createAction (0, modelActions);
1 _6 f$ `9 ]' |9 Z3 S9 Q/ ?( M
2 ^5 z$ m- L6 [0 v$ v return this;: d# ~1 m; W- z9 w! R
} |