HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 F* t" z ]: d- L) q5 U
( A2 e/ `* t5 a) n% B4 v$ d public Object buildActions () {/ e& }- ]0 \- C) h/ A
super.buildActions();
$ T! P) i" `! b+ l ?! J0 W
& [) F y. Y+ e2 C // Create the list of simulation actions. We put these in% b& A: `7 p8 C# e
// an action group, because we want these actions to be: `! L* |- I8 z5 t9 F3 e
// executed in a specific order, but these steps should# @4 a/ I9 \$ e& H
// take no (simulated) time. The M(foo) means "The message
8 o# r3 m7 k0 B( V2 k J // called <foo>". You can send a message To a particular6 V$ u5 y b, P6 x8 O
// object, or ForEach object in a collection.
1 B; Y5 w, Z8 D . u2 [$ y2 ]9 }3 _5 z
// Note we update the heatspace in two phases: first run' ~$ E2 Z1 `) D M7 i
// diffusion, then run "updateWorld" to actually enact the
+ G {% p2 t2 K. B" }) _ // changes the heatbugs have made. The ordering here is
* M. M3 r1 o& G" w- K // significant!
4 ]8 V, t. `4 Z# h% o ! I6 B7 k' r# ?) H7 m4 ]: L" u
// Note also, that with the additional z! c7 T6 r) n# @
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 ^( J( F% x7 W* V' n7 q' m // randomize the order in which the bugs actually run
0 u5 p' m. v1 Y+ i% c2 u5 y // their step rule. This has the effect of removing any' n i( Q$ D9 o4 y" H
// systematic bias in the iteration throught the heatbug8 ^ D |4 C+ J1 n
// list from timestep to timestep
2 A1 N q. R( Y: c' l
; q7 [: T0 m v( m // By default, all `createActionForEach' modelActions have* Y6 }+ K7 J4 l5 H; v
// a default order of `Sequential', which means that the$ K* p5 z- S! {/ j( |! a: u
// order of iteration through the `heatbugList' will be
6 Z4 `$ y1 |% H8 @$ \) I // identical (assuming the list order is not changed( E" _8 _) i3 C) n& P" O- s
// indirectly by some other process).$ O& Z |: N9 k: h9 t9 T
9 f3 o& M5 Q1 T# \- v
modelActions = new ActionGroupImpl (getZone ());
; {. r1 `* n1 l( O! Y0 o H# A& [1 n0 M: V" ^
try {
7 W7 {' {) H+ E1 m modelActions.createActionTo$message3 f+ }& }. J/ ^9 ?( V) c
(heat, new Selector (heat.getClass (), "stepRule", false));- R! b: q, Z# N ?$ G. T
} catch (Exception e) {3 b- \7 V+ D* d! T4 u
System.err.println ("Exception stepRule: " + e.getMessage ());
- y" t! K8 I9 N* K2 ~3 @% w" x' f }
4 [) [7 ?' @7 h& l
1 @( V ]: Y7 [3 y! ` try {7 `) q: h7 w0 W Z8 ]8 B& m) p
Heatbug proto = (Heatbug) heatbugList.get (0);
& j3 y- D# u- H# N Selector sel = . d+ ?( H: v- q1 B0 {2 i7 ] E0 j
new Selector (proto.getClass (), "heatbugStep", false); \2 U6 t0 n V9 |+ q6 A, v
actionForEach =3 A+ A; U2 \9 X. e3 t
modelActions.createFActionForEachHomogeneous$call& t$ U/ ?# n# i* T E- s
(heatbugList,
. K2 G/ x+ ]3 e new FCallImpl (this, proto, sel,
( v) X0 A4 s/ E) Y# ]* U) o4 y" E new FArgumentsImpl (this, sel)));6 K2 L d" M" P# C
} catch (Exception e) {( A: }* a; ^1 |% R6 H- C" J
e.printStackTrace (System.err);5 s/ B d6 e, `
}
5 a" I8 j+ {' A7 Q5 C( H u3 b C |# K* Y! [" L
syncUpdateOrder ();
7 Y4 Q/ R. p+ V/ N) e% D0 ~: Q* g4 c) Z% O5 M
try {
( g( |# R8 r4 d! P modelActions.createActionTo$message ! l# w5 B1 e; D7 G3 K' B
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 t+ Z/ o; E7 m" u7 `6 q' G } catch (Exception e) {
, b* s# l- k9 @5 m0 P System.err.println("Exception updateLattice: " + e.getMessage ());1 t' N$ {0 U% \8 L) @
}) r% m6 v# R; W- l. f/ Z. E- ?! ?6 C. B
. L, S' O, R4 f/ F2 h* ^
// Then we create a schedule that executes the$ v% @+ t9 n% f8 @/ p1 G* _
// modelActions. modelActions is an ActionGroup, by itself it: Y' H; c4 F+ q u2 O2 R1 U
// has no notion of time. In order to have it executed in3 V/ m6 P) M% M' t* d9 r/ g
// time, we create a Schedule that says to use the
# h: K8 S. D Z3 j1 } // modelActions ActionGroup at particular times. This
+ a7 y: T; y2 X8 C( B // schedule has a repeat interval of 1, it will loop every- w1 t5 K6 F: Q/ h6 h, l
// time step. The action is executed at time 0 relative to
+ n5 `' a. g8 Q6 l; v) i/ o // the beginning of the loop.; L3 a" z* l4 F0 m7 t3 T
+ _. _+ Q. I! _ k
// This is a simple schedule, with only one action that is' {" y: v( U$ y7 w
// just repeated every time. See jmousetrap for more+ T' ~% d! n1 @" U1 i0 Q7 Q% @
// complicated schedules.* q& ^4 `2 K6 g" [% V; _6 f8 Y
& ]) y) |" |! C j3 h# G, w; c modelSchedule = new ScheduleImpl (getZone (), 1);! M$ M5 {' I1 }3 [* O& Z8 a
modelSchedule.at$createAction (0, modelActions);
. a4 E; S2 ]6 ~5 }2 z* R
# F$ Y0 t! N3 {: t/ | return this;* n2 n3 h- e: D0 L9 t! t" E- z
} |