HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, i; A4 O" K+ A. b E) ?/ g; J. I& {. p: M9 p
public Object buildActions () {+ }5 z8 R+ S: r# x
super.buildActions();* ?. u1 C3 ~* A0 p
: @" O R3 d2 R/ E0 \
// Create the list of simulation actions. We put these in7 C" d1 U% g8 i5 s
// an action group, because we want these actions to be
$ c7 F" j0 ^6 O" d8 n0 B // executed in a specific order, but these steps should' N' ^7 ^* C7 V/ E# L3 m
// take no (simulated) time. The M(foo) means "The message0 R2 t s: S/ p: [
// called <foo>". You can send a message To a particular5 x& g* l4 G7 S
// object, or ForEach object in a collection.( Y5 N5 M/ }3 k9 w; t# ^+ z6 l
/ \. F$ S: h$ G* V8 t) c // Note we update the heatspace in two phases: first run
: |) a4 s2 h% e: _8 g# E' n // diffusion, then run "updateWorld" to actually enact the9 h; Z% s/ R a6 ~' ~6 ?* n
// changes the heatbugs have made. The ordering here is
$ L: E, M2 c2 M2 u // significant!
2 Z7 W0 j' g q. ]& _
, B g2 @% ~* L' c' } // Note also, that with the additional( I z; i y# u2 f; p x, S$ M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( }+ n3 Y, o1 B+ w // randomize the order in which the bugs actually run
5 q& W$ n* a0 ^ // their step rule. This has the effect of removing any
, K% `7 c4 W* a% p) }! |: i v // systematic bias in the iteration throught the heatbug$ |- ?- t' a; c+ y
// list from timestep to timestep# U: W: N& a! g- N( U7 r% S
+ M1 f! G g8 q: ]0 l
// By default, all `createActionForEach' modelActions have& _% |9 q9 x/ O1 l6 |
// a default order of `Sequential', which means that the
% I2 Q& o( Z, b+ Y; `& Z // order of iteration through the `heatbugList' will be
+ U* V) |# C2 ^2 X% x, U7 |* t4 t3 U // identical (assuming the list order is not changed& q! m' z& |' b6 K+ S
// indirectly by some other process).
0 D/ z0 R- C/ {
( b5 w6 ~: U7 Y. c2 V3 { modelActions = new ActionGroupImpl (getZone ());
* p5 }6 I" d& W& t# J- m
Y7 d5 h) Y( i try {1 V7 J/ C# y4 q8 T! @
modelActions.createActionTo$message
' W( Y' n% d }+ Z- v4 j9 _0 C (heat, new Selector (heat.getClass (), "stepRule", false));
7 s% l+ @, V- r$ d } catch (Exception e) {- j" y, q' P$ r z
System.err.println ("Exception stepRule: " + e.getMessage ());
5 M N; T; t% S! h4 g' x }
4 n& a, I! E1 Q( {
+ D$ j; i2 \4 h/ I try {
; G/ k& D4 H9 E* r- c& k' h( R Heatbug proto = (Heatbug) heatbugList.get (0);
# {, }1 v# p. G- [* S) R Selector sel =
3 x; W* I+ R) W$ e% X2 T: k8 X new Selector (proto.getClass (), "heatbugStep", false);
' U% ~# a' x: W h5 H! ~ actionForEach =$ F1 V ~/ T5 o5 [$ i! h
modelActions.createFActionForEachHomogeneous$call0 h, L9 b9 S7 A. u5 p1 `
(heatbugList,) j+ U( _) {& I: K
new FCallImpl (this, proto, sel,- ]& ]8 F/ i/ ]9 Y2 a* Y: J
new FArgumentsImpl (this, sel)));
7 V/ J% B6 x, a# i. k } catch (Exception e) {$ |9 s- p0 X0 Y* b
e.printStackTrace (System.err);
0 B$ u+ O4 c X% p5 X8 z3 T }0 N- N! D( q1 C
" k7 O$ N* i. ?9 @ p. x9 w syncUpdateOrder ();
; L7 ^8 y, [; J, e. Q6 v; y5 C; t# O$ l' m' y7 P
try {
+ j( j) h' W. P0 L# ?' n/ H modelActions.createActionTo$message
, b# ^& g1 v5 m (heat, new Selector (heat.getClass (), "updateLattice", false));
8 {8 i- |( v$ e, Q' i5 b } catch (Exception e) {
7 V2 p( ~0 R- U, w: T System.err.println("Exception updateLattice: " + e.getMessage ());
% E! S+ B. ], V A }
. D4 X# _9 ~% }8 g$ v
i5 S. r' ]8 t7 \. i! } // Then we create a schedule that executes the
$ ~2 f. [3 [3 _ b# Q // modelActions. modelActions is an ActionGroup, by itself it& h) _0 k' H4 D$ P$ \$ l& E+ L
// has no notion of time. In order to have it executed in3 U8 E7 N& ?2 g: K5 z3 O
// time, we create a Schedule that says to use the3 _' ~- w3 C* I. `
// modelActions ActionGroup at particular times. This
5 p+ K8 I8 \1 S // schedule has a repeat interval of 1, it will loop every
, }, q) a) v6 W5 p6 f2 V" k' m9 v // time step. The action is executed at time 0 relative to9 O2 v6 w. |; U0 v- c
// the beginning of the loop.
' A( ^9 z; _3 m9 N! J0 l
9 l) U4 v7 P( }* n# b" d$ R" X // This is a simple schedule, with only one action that is
4 A/ D+ E" t! T/ k& F7 ^1 S0 v8 u // just repeated every time. See jmousetrap for more& M& ^, a( U0 ~& T# b7 A# o$ x
// complicated schedules.! N# e, U# q3 T: ^
- U. P, V0 B5 p. i& q% Y6 h9 ` modelSchedule = new ScheduleImpl (getZone (), 1);
2 }' h g0 p. G# B# p4 _8 }+ u modelSchedule.at$createAction (0, modelActions);8 \1 K! I N7 }3 E( W6 a
% J6 h/ l+ i/ d; j& |. g5 _+ z
return this;
6 @2 ~; N2 o, k } |