HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 G; H# m4 i8 n
3 X7 T( j1 ]0 z/ l$ B$ D6 E
public Object buildActions () {
$ \0 t( V( L! q3 m; p0 E super.buildActions();" P9 {6 x" I8 ?
' b1 k" s# i/ e Y! a // Create the list of simulation actions. We put these in
) h5 a, ^% l/ a1 C3 c Q4 c // an action group, because we want these actions to be- A# p# ~2 p% u6 `# w
// executed in a specific order, but these steps should+ N# @; c- f& T# _8 c
// take no (simulated) time. The M(foo) means "The message
- _& W2 k1 z& u1 _, Z // called <foo>". You can send a message To a particular' m( E \ `# @% `- u6 t
// object, or ForEach object in a collection.3 c7 P8 K8 E0 K
! K ^3 Y) p; k6 `6 R7 n7 A& B
// Note we update the heatspace in two phases: first run" y2 s0 d: c) H' x
// diffusion, then run "updateWorld" to actually enact the8 q/ i3 P v" F( F
// changes the heatbugs have made. The ordering here is2 ?. h1 i% @( \: ]: ]: c
// significant!
p" b& y' y# w1 h( y2 n% q ! l) k# {4 s K8 a; a* ~( y
// Note also, that with the additional: ~3 ?$ y- {" {
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 i; I3 v( A' B+ Q: @3 v4 O // randomize the order in which the bugs actually run
/ J; o: ~) s+ ^1 w2 I // their step rule. This has the effect of removing any/ T# ^: h" _3 l/ M) c5 M
// systematic bias in the iteration throught the heatbug3 v$ c! d& N- Q1 ]2 Z' {
// list from timestep to timestep
, Q" m. y7 n) N6 d6 ^6 r$ z
1 F$ A# W5 i4 b* O, y1 }$ R // By default, all `createActionForEach' modelActions have
2 m7 U$ Q/ c) ? // a default order of `Sequential', which means that the1 i; J! X8 n* `& n- a7 j) W3 T: Y: P
// order of iteration through the `heatbugList' will be+ o: C, ]% z8 L' H
// identical (assuming the list order is not changed8 M2 U0 F! t( n7 o) ^
// indirectly by some other process).
# B4 C" P5 m4 a& Z. Q
% c1 j* y. |' V( S modelActions = new ActionGroupImpl (getZone ());- R' m. f; w" a; U
- ^6 V! b, i F" y# q
try {
3 o3 ^+ {, j- {( c1 b& G) S modelActions.createActionTo$message2 `$ E& E8 g& j& v2 J; t
(heat, new Selector (heat.getClass (), "stepRule", false));" G! R; T8 l% M/ p
} catch (Exception e) {1 W6 J0 s: \4 I! Z
System.err.println ("Exception stepRule: " + e.getMessage ());
( W9 @& x( t7 e% d* K4 `8 n }7 G! V) }% {: b6 u
( c/ I/ V) S8 N* L: o% }( k
try {
4 o4 l* @- _* g6 q* i' D Heatbug proto = (Heatbug) heatbugList.get (0);+ B6 i* f s4 D6 b' B
Selector sel =
6 ~! ^1 Z& f% C; l9 E new Selector (proto.getClass (), "heatbugStep", false);
' B* H1 c/ ~2 H% F actionForEach =0 s! J5 k; {* z- h& W
modelActions.createFActionForEachHomogeneous$call* t9 {4 J# S' f* T, v
(heatbugList,
1 L) b) q6 X7 t$ K3 H new FCallImpl (this, proto, sel,7 d; }2 g0 d% E4 k& p% `; G5 G
new FArgumentsImpl (this, sel)));
% q3 S$ Z7 t0 L! F } catch (Exception e) {
; w( m& u& |& a1 G. L e.printStackTrace (System.err);
& X! s* v. Q3 N; a2 v& i- N }$ e7 }/ U; B/ K- _. \$ g/ o+ z
7 O' Y/ y' h2 A5 q4 V- E5 e
syncUpdateOrder ();
* @, ^9 U7 T" M! ^! f3 _
2 K- f+ G9 V s# [2 T- W% P try {2 t% u2 ?* `: b. \
modelActions.createActionTo$message
7 ~! o; t( h) }6 n (heat, new Selector (heat.getClass (), "updateLattice", false));
( ^6 `4 g- p) L, G. f } catch (Exception e) {
3 W7 t# M. ]. k5 J$ E( M8 t/ K System.err.println("Exception updateLattice: " + e.getMessage ());
# m( [5 q( p6 ]$ C; q2 A }! l1 `: ~6 p3 @4 x' B0 J4 l6 n
4 r0 R1 s( S# E4 b# A
// Then we create a schedule that executes the
1 d f3 k+ a2 B- R' w/ u // modelActions. modelActions is an ActionGroup, by itself it
0 A" a V' M6 H3 y) L) X2 L! p6 z // has no notion of time. In order to have it executed in
2 r; D% T" l& h // time, we create a Schedule that says to use the9 J5 t- C9 F9 S& N
// modelActions ActionGroup at particular times. This- W/ Z \, J: \8 g
// schedule has a repeat interval of 1, it will loop every' h! \( k6 b% z
// time step. The action is executed at time 0 relative to
f9 h; S7 z1 ~ // the beginning of the loop.
. W" J# V4 G4 U; U+ N3 k
4 R: x1 C+ G+ I1 [- x // This is a simple schedule, with only one action that is8 L0 k# `( S) L! e1 Z( b+ Q2 k2 `
// just repeated every time. See jmousetrap for more( Q2 U3 Y4 D( e0 ^$ q! L
// complicated schedules.
. I, q/ z7 M) e: y 7 ?( |# x8 p u5 G# W
modelSchedule = new ScheduleImpl (getZone (), 1);
, Y& z+ K$ m& D' f+ f modelSchedule.at$createAction (0, modelActions);
) R* i6 I$ i& p4 F* _7 ^' ~+ R8 a4 O 6 r4 L' {- P3 u( W! }0 ~7 ~2 A
return this;
3 Z8 \/ [9 O7 S( Y$ u } |