HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" D/ [" y; j6 e' V3 b8 m9 q8 i2 J, o5 a+ S4 g
public Object buildActions () {) E; ?4 ]$ d4 h
super.buildActions();: h$ }7 w, R& {. ^9 N
# o3 r( p. Z2 U7 ~3 { m, K // Create the list of simulation actions. We put these in0 L& s9 Q# A% f( Y+ i
// an action group, because we want these actions to be/ B) ~1 V* h, N k& W
// executed in a specific order, but these steps should
1 G5 y. w4 L; d; g // take no (simulated) time. The M(foo) means "The message
) ^( z6 Y& k8 h# a9 Z3 P5 J& w; M // called <foo>". You can send a message To a particular
' g- C" H4 _/ V, ~2 r // object, or ForEach object in a collection.
& h, i3 F; J) f4 Y9 s2 q6 i; A 9 Z6 T* V8 Y+ m- B: _' P! A; w& y
// Note we update the heatspace in two phases: first run: j |, A8 f, a2 f0 j: C
// diffusion, then run "updateWorld" to actually enact the z4 m1 c1 k: s! b
// changes the heatbugs have made. The ordering here is* K5 d; @2 {0 o- P- E% [7 m
// significant!( l c9 W' x6 {6 ^
& ] X/ g1 D% G- X5 L( R+ N6 W // Note also, that with the additional
. p* ~' }$ d0 j! G$ B // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 b( h3 q8 v; |6 H f // randomize the order in which the bugs actually run
. a2 r. A+ v0 K7 w% C$ L5 B0 _ // their step rule. This has the effect of removing any
, W0 O9 t1 s- _; N, _$ R // systematic bias in the iteration throught the heatbug0 ~8 I7 {! I: C1 b2 U
// list from timestep to timestep
; u1 ^* O# m/ ^/ {0 q9 k# ]+ @0 k+ D
' a3 R0 c: ^9 R6 j2 G/ c // By default, all `createActionForEach' modelActions have
7 \% H+ U! f( C: |) z# Y; V // a default order of `Sequential', which means that the( @% g" Y& z# @. u$ N! ~2 @
// order of iteration through the `heatbugList' will be
( _( ]# v: ^( K // identical (assuming the list order is not changed
- H8 r" e% R. p4 n // indirectly by some other process).' u o% F: k5 L4 H3 T
" a& ~0 v* l) _' D" w' g5 u, A+ ? modelActions = new ActionGroupImpl (getZone ());
N/ N- {; n; [8 ]) R9 a
# n- K+ m" S2 L9 a try {
' M1 T7 y, K" C- U/ m modelActions.createActionTo$message
( S' D5 Y" y2 D; r" N9 u- M (heat, new Selector (heat.getClass (), "stepRule", false));
0 e: [2 W6 t; g7 m; o } catch (Exception e) {
# ^/ ~8 ?5 N% j System.err.println ("Exception stepRule: " + e.getMessage ());
+ ?, P5 C- ?' p( B }
' v+ C8 d/ d+ L. F! ?6 R# v0 f* T7 \
T% x4 P* O8 V" ~" k5 e7 `: w try {4 T7 _( L! r) g5 v
Heatbug proto = (Heatbug) heatbugList.get (0);, o: S" t# a" J# z
Selector sel = 5 O7 J- C7 g' q; h; s. B
new Selector (proto.getClass (), "heatbugStep", false);
" [7 ?3 a$ v5 a! k2 v* @* i/ u# v b actionForEach =
( X- m" h% r* w3 ]5 k modelActions.createFActionForEachHomogeneous$call
! r! s& p' S9 R, c5 { j% }7 ] (heatbugList,
2 U# ?7 g2 J- z- ?: ], K; ~0 I! X: e4 W5 T new FCallImpl (this, proto, sel,
, L x* N7 D" L new FArgumentsImpl (this, sel)));
& l) f+ M. a1 J* f- F3 L d4 m) u } catch (Exception e) {! W! k; ]' W8 Y+ f. j
e.printStackTrace (System.err);0 e% X- R; [3 @* ? Z0 m
}8 e" p5 T& T: T
0 o+ u- R* J- `6 p7 E2 a
syncUpdateOrder (); `7 V; y* h2 ^& \& W
! n/ u: K% u/ j
try {: I( d7 c$ N+ Y9 n: V, D
modelActions.createActionTo$message
1 U0 x- X! W H& [( x+ ^ (heat, new Selector (heat.getClass (), "updateLattice", false));
5 {* L' k4 r9 N* i2 P3 X } catch (Exception e) {
' A; ~/ ]% s3 {. R! ] System.err.println("Exception updateLattice: " + e.getMessage ());
/ n0 L% L/ [4 ` }
4 y3 \6 k5 o% t) j7 F6 e( R' z S 7 C* J; N$ m2 p$ h) f: @
// Then we create a schedule that executes the
- Z4 {% H: T2 L) x, f( e* } // modelActions. modelActions is an ActionGroup, by itself it
9 |# A$ F/ B$ l ?0 H; L // has no notion of time. In order to have it executed in- @5 G7 Y; ^$ y; _
// time, we create a Schedule that says to use the
7 T2 k) r! \5 r4 F+ h% a" i6 x // modelActions ActionGroup at particular times. This
/ s) e2 `9 S ~; J. N" I // schedule has a repeat interval of 1, it will loop every
# a; |2 z+ Q0 a% P+ V( V // time step. The action is executed at time 0 relative to1 [' ?. u5 o- j V* c' {
// the beginning of the loop.' m) N8 ], P9 {( `9 f" f
. J3 G2 t# i* Z) \
// This is a simple schedule, with only one action that is
) f1 M" {6 L+ a // just repeated every time. See jmousetrap for more
5 v& c6 Y6 P: C // complicated schedules.
% ^& A$ e$ u- _ y9 ]7 {
8 C ~7 L6 v+ z+ `+ L5 p modelSchedule = new ScheduleImpl (getZone (), 1);
3 i$ ~3 I9 y1 n. {' X modelSchedule.at$createAction (0, modelActions);
% T; D' E( R4 Q; U& }
0 W" B" ]$ h8 L; \, _7 S return this;
/ @' h: v" k+ L5 ~. Z } |