HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 O v7 e1 U% v' e1 h' p9 e5 [
: L) s L$ r' J( h5 B% E( Q0 w public Object buildActions () {$ L% R4 T# N4 y0 R/ h# ~+ s
super.buildActions();
9 [ Z5 S( v s9 P: J4 C
8 J- g: K7 v4 M3 _$ _ // Create the list of simulation actions. We put these in3 }$ l1 U4 v, u2 i
// an action group, because we want these actions to be
, F7 W1 ^4 D S; y // executed in a specific order, but these steps should, A1 h1 } f% q. d, B+ L! B
// take no (simulated) time. The M(foo) means "The message
( J0 m+ f- J! T4 R4 O! q' } // called <foo>". You can send a message To a particular& X& z3 n! O5 y
// object, or ForEach object in a collection.
' t4 F* r% b s 6 I# l0 a, B3 Z6 g9 D& E
// Note we update the heatspace in two phases: first run
) J6 y2 W2 h$ l( `) ]+ F6 t! W2 S // diffusion, then run "updateWorld" to actually enact the
' O" o* P- T, K% o2 F: P // changes the heatbugs have made. The ordering here is
+ z. _ A/ W0 ~/ C: w // significant!+ V2 S: S7 u, y' W; d
6 F: Q. l1 ^! S; S5 H* V7 K$ U // Note also, that with the additional
+ L0 ]: f! A9 S/ Z9 d' \ // `randomizeHeatbugUpdateOrder' Boolean flag we can. A- U( W* B" W
// randomize the order in which the bugs actually run: J: ?3 y1 M0 B. @ |9 |' t+ ]" p
// their step rule. This has the effect of removing any% Z. L4 s# F' ^* u; s2 S- e; O
// systematic bias in the iteration throught the heatbug
: v8 y% ?7 d0 H7 e // list from timestep to timestep
0 `6 X# X7 m( \% }4 e0 V
9 s( e& F$ C+ Q // By default, all `createActionForEach' modelActions have
4 U! G9 U# ~0 o U' k1 G // a default order of `Sequential', which means that the
* r) C7 ~9 A" i! J& L% \+ n // order of iteration through the `heatbugList' will be
) J! e3 Z" |9 T8 P' l: D2 W7 S. ^$ W // identical (assuming the list order is not changed
}# A3 I s% f* ]9 ?. R // indirectly by some other process).
* ^' ^# o, l; M7 i& c0 V" T
( c$ _& x2 D0 I2 ^* _* b7 } modelActions = new ActionGroupImpl (getZone ());
! Y, F5 j4 J* C7 L1 @6 P' W9 ?% N: `1 W. b0 E3 O) S7 [9 M1 |$ ]) w6 s' g
try {
$ O: e5 u& `+ Z* H" V, s6 Y modelActions.createActionTo$message
% ?, {, z ], R* u0 `- c3 u (heat, new Selector (heat.getClass (), "stepRule", false));
" o: i- Q. h, ~( ]/ z } catch (Exception e) {! ? [5 b0 ^. w' m) }2 A1 f
System.err.println ("Exception stepRule: " + e.getMessage ());4 U. K/ _) D% R3 {
}
: y: r8 m) f9 D: B; @ A: K, z! I
) m3 a! p7 Z5 E0 t$ w A* Z try {
5 V8 \9 X8 f# \$ J Heatbug proto = (Heatbug) heatbugList.get (0);) p. M, E9 t8 u6 i
Selector sel =
& Q; o: | x8 z9 ]6 ]" i! w new Selector (proto.getClass (), "heatbugStep", false);
1 j" D/ v& K) P- V( W% K. c actionForEach =
9 g+ _+ n/ q- r o modelActions.createFActionForEachHomogeneous$call3 ?: Y/ D! `/ H; g L3 ^
(heatbugList,
- Y/ P9 y$ w# J new FCallImpl (this, proto, sel,, _3 S' j; N2 }- |; D H8 s' V6 q, ]
new FArgumentsImpl (this, sel)));. l/ d5 i- {. P6 \
} catch (Exception e) {
: t4 ?- n, e& T! Y3 M7 `% X e.printStackTrace (System.err);
9 N& E r+ e6 h }
6 W, |" Q# o# N
5 ~* T2 c' y* O, L$ \# _ syncUpdateOrder ();
' C7 a. t7 j! j4 ^! ?0 _0 n- v
7 a' [9 A; j$ d try {/ ~( U0 w Q1 q: D* O
modelActions.createActionTo$message
8 {( v5 |. l. J" h* G( t4 x5 ~& _4 [ (heat, new Selector (heat.getClass (), "updateLattice", false));' ]' M; ]( ]) z _3 I/ F
} catch (Exception e) {% i! d: j* m4 G3 I* ^: O
System.err.println("Exception updateLattice: " + e.getMessage ());
/ J& d3 U) }% Q$ H+ e" W1 K! i }
! b' B* ]. D0 ^0 K8 {+ b
/ u! G% `8 T |4 Y- E // Then we create a schedule that executes the+ U2 E: \6 L8 p, ^
// modelActions. modelActions is an ActionGroup, by itself it A& x- J1 @ A
// has no notion of time. In order to have it executed in! \1 Z$ z$ t* ^# \
// time, we create a Schedule that says to use the0 b1 N6 \" o' A: O& j" w7 M3 A R# S
// modelActions ActionGroup at particular times. This% j b! M/ V+ D% T( [ M2 `
// schedule has a repeat interval of 1, it will loop every
% t3 ^* u8 I& d9 L2 ^/ c R // time step. The action is executed at time 0 relative to
1 x/ H3 w3 y- b+ Q/ t4 U6 u0 m // the beginning of the loop.
: E/ e, J7 V3 B' _ y5 Q X4 i8 Q/ e
// This is a simple schedule, with only one action that is6 d% @, p9 P6 ~5 `" _
// just repeated every time. See jmousetrap for more2 l5 i9 s3 V8 D: p$ r0 i% ?
// complicated schedules., d- `( G: t' H: R) g5 A5 s# i
! X- p; r4 N7 X' A
modelSchedule = new ScheduleImpl (getZone (), 1);
. G1 X2 `) C! J; W2 G modelSchedule.at$createAction (0, modelActions);% H- V$ Q D+ W/ v8 n' g. M: ~' B
1 _8 v6 K# h. a, d" K, C) }/ B) h return this;
% E0 {9 v+ b. ^" Z2 D: ?" }8 \3 Y } |