HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% @; R6 D5 _# x- M8 Z6 S3 a* p+ W5 ~1 ^; t
public Object buildActions () {) ?! L3 C- o1 [( X$ _
super.buildActions();3 t+ q$ o' F( \7 e
. \* z0 C3 ^9 \5 M9 i r7 M // Create the list of simulation actions. We put these in# j- G, l7 @# T4 x% @; n
// an action group, because we want these actions to be. K% L! g: g8 b
// executed in a specific order, but these steps should. l) I) l6 Y3 Z3 R# D" H
// take no (simulated) time. The M(foo) means "The message! a5 T2 F' i* V" n+ P8 G
// called <foo>". You can send a message To a particular
8 ?3 ]" r1 z- P1 j: Z. `# w7 M // object, or ForEach object in a collection.
& X6 w2 \/ }+ H \% |9 g; g# N; t% b
// Note we update the heatspace in two phases: first run
- e# ^; j/ Y7 n0 B; }: d // diffusion, then run "updateWorld" to actually enact the% h. H# ]' B" Z8 @% v# P
// changes the heatbugs have made. The ordering here is& F6 Z3 T5 }3 ^3 O" H6 v) F o
// significant!
. E5 q h: |+ z& O; R* i8 C 9 c1 _7 B8 A, i1 ?( }+ [% \
// Note also, that with the additional
$ |: T/ u, Z2 x! a // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ S) V: G3 U! Z // randomize the order in which the bugs actually run- k k8 k1 x& J* Z5 n# } \0 K6 y
// their step rule. This has the effect of removing any
+ i5 o2 G1 G% ~0 Q% t) q& ^ // systematic bias in the iteration throught the heatbug: U# E% X: i, N; G5 A$ Q
// list from timestep to timestep
" \; I. e/ C/ I, s. x
9 P7 c/ p$ p# O4 Q* O, p0 \ // By default, all `createActionForEach' modelActions have X$ @9 R0 y2 g7 Q/ H8 A1 Z' m4 p
// a default order of `Sequential', which means that the
0 a1 L4 \$ ^$ a/ u2 ?- ^9 p6 R // order of iteration through the `heatbugList' will be' J+ r0 _' E) [4 L; ^: E4 W5 i: X
// identical (assuming the list order is not changed
7 K/ ?4 H2 w. L9 s+ i // indirectly by some other process).
4 ?$ F( ~2 X" b5 o5 l/ k0 v 5 ^" M% I% A7 I
modelActions = new ActionGroupImpl (getZone ());
' D) R# {+ h" V g3 f$ J- I, t7 a$ x3 [; w$ F$ U5 a$ I1 S$ B
try {
" }+ H. A/ z7 \# p* K7 m modelActions.createActionTo$message
8 A+ o; h1 W, _; G2 a' { (heat, new Selector (heat.getClass (), "stepRule", false));
7 b: w. I$ ~% V J m } catch (Exception e) {! P/ f) e1 v+ U9 U- y2 E
System.err.println ("Exception stepRule: " + e.getMessage ());! C0 y/ q1 D E) X, `
}
1 p! d/ u$ J, r( M! H3 S$ q( L5 o# V( b& }: Z0 U
try {0 C4 o" q" M3 `! o. A% B
Heatbug proto = (Heatbug) heatbugList.get (0);) Q/ m% ?% X+ ^0 |$ D' r8 e
Selector sel = ! B; ]3 F, V! _ q `
new Selector (proto.getClass (), "heatbugStep", false);8 t; {+ K) R( f# m1 W( I1 W/ \; c
actionForEach =
# I+ k+ E8 e3 q T8 A3 I8 ^: V modelActions.createFActionForEachHomogeneous$call
6 h8 G% A6 `4 M/ R" U (heatbugList,
1 r& h0 J; H( o1 y new FCallImpl (this, proto, sel,
$ A# U3 \9 J) i- L) U; g new FArgumentsImpl (this, sel)));
2 r( b4 F: B% L9 I } catch (Exception e) {1 r' L( }9 T. _- m0 J. A1 @) W
e.printStackTrace (System.err);
. a9 [& l7 ^" R! }* d+ k. J' q }, o0 w6 a; \1 {# ]2 a4 n- s7 d+ ^9 o- I
/ ]6 w7 Y3 Y* Q9 | syncUpdateOrder ();
h& r d: G; S2 V9 s+ N) n5 B- ^: M" c
try {5 G7 z1 |. x" [9 s
modelActions.createActionTo$message 9 V' N: V: q2 y* a
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 V Q3 S. G7 Q/ w! V9 ^ } catch (Exception e) {8 B! i7 w+ p3 O4 A% p; X% F: A
System.err.println("Exception updateLattice: " + e.getMessage ());$ p( S7 c2 c) o6 t1 r
}$ ~& z2 t! n$ O+ o3 ~6 ^$ M3 V
2 j( a& V" |( L" ?" u* r
// Then we create a schedule that executes the4 x0 H+ l: t* g5 |5 i$ p
// modelActions. modelActions is an ActionGroup, by itself it% X |+ j( P, @" B" |5 A
// has no notion of time. In order to have it executed in8 b* Q* ~8 O# q( m( m, R* z
// time, we create a Schedule that says to use the
. q+ Y' g& @& J" b" i+ \" W! H // modelActions ActionGroup at particular times. This
. d: a* ~( a2 X // schedule has a repeat interval of 1, it will loop every% g- n: }( |+ E ~
// time step. The action is executed at time 0 relative to
) J5 n+ L+ N$ a- t0 _ // the beginning of the loop.
" o1 x; b3 A2 h9 ^5 S$ z6 ]* i$ ^& O: D2 F3 @& R+ z0 D/ y
// This is a simple schedule, with only one action that is6 e2 ~! B; g: [# e: \3 k% s
// just repeated every time. See jmousetrap for more/ z6 r8 h7 l) q8 W* P9 K5 |9 r
// complicated schedules.
; j& x+ O* ]+ O( p. K$ [ , W: v2 A" _7 S$ M8 Y' q
modelSchedule = new ScheduleImpl (getZone (), 1);8 `+ r$ r) y/ t
modelSchedule.at$createAction (0, modelActions);
4 C: l5 G8 L) I/ `- D 5 M" P6 U% h' y
return this;7 W) O n4 ?6 t& Y7 {3 i" P
} |