HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" L" |+ e! Q. ^
! l$ E z( d1 I" ^% W
public Object buildActions () {
f i) Q, r$ J. t4 y super.buildActions();# j4 [ ]4 o7 t* C
- E) q) }" w% v f0 ]
// Create the list of simulation actions. We put these in+ |8 U7 \. L: k D* t9 f
// an action group, because we want these actions to be
2 M8 R+ C1 E! m. K6 p // executed in a specific order, but these steps should$ k. X! Q9 ?! d5 w$ r' ?6 V
// take no (simulated) time. The M(foo) means "The message
+ f& B- Z' r( B/ _3 q* P0 _ // called <foo>". You can send a message To a particular
5 ]/ b9 _9 A) p: h& \ // object, or ForEach object in a collection.
$ ?0 t5 A% q" s8 j" Y3 {
* R- e5 G8 b2 ^/ c% F$ k$ R // Note we update the heatspace in two phases: first run
% M/ K+ V$ O* U; N // diffusion, then run "updateWorld" to actually enact the: l% v: R. ^# F8 S; e& e; ~
// changes the heatbugs have made. The ordering here is
0 V4 S `7 Z4 {8 r4 ^8 ]/ `) w // significant!' A& G: ^! n* A" ?
5 d$ ^: p' L. d) d7 h% W1 n$ d // Note also, that with the additional
& Q! I' M8 e3 B# O // `randomizeHeatbugUpdateOrder' Boolean flag we can
p$ j! h! ^. W5 n& i' ]$ D, R // randomize the order in which the bugs actually run) y8 L J, G" ?5 I. B+ g& O
// their step rule. This has the effect of removing any
3 c( j h; C# x5 @5 d4 w // systematic bias in the iteration throught the heatbug" P) W/ T; d, B2 \8 n- O
// list from timestep to timestep: F" r0 H7 e" E$ }' N. H* A4 D- k
3 O! E$ m0 Y+ O& J# C. t // By default, all `createActionForEach' modelActions have& ^2 a) b0 h l$ @
// a default order of `Sequential', which means that the7 E# z9 j6 y) W* {3 ]4 M
// order of iteration through the `heatbugList' will be) _ N6 U# c6 j9 |0 \
// identical (assuming the list order is not changed/ ?- F( p- c' m: g) f J2 m
// indirectly by some other process).. N9 W5 A! M$ D2 Q
0 Y* i; v- p- @! O6 U' ~- L modelActions = new ActionGroupImpl (getZone ());
4 A8 j! c% t; B0 R5 \ j( H& r1 A0 h+ m0 q1 t
try {2 z" \6 i e) w* J3 G$ t
modelActions.createActionTo$message
/ _6 W% d" u! j: p0 `- |. d7 i. U% l& Z (heat, new Selector (heat.getClass (), "stepRule", false));
* |; s8 b$ M0 ^0 q' T7 } } catch (Exception e) {
) e/ N* j) O/ o- r) Z( Y System.err.println ("Exception stepRule: " + e.getMessage ());) v2 C+ \3 J8 I5 z! Z
}. |1 n5 E8 g' [, p! i
5 a/ H$ Y l& R try {! O. D$ Z& C Y; W6 U8 c
Heatbug proto = (Heatbug) heatbugList.get (0);/ ^8 M/ q9 I- M: } @4 V
Selector sel = ' K$ X" {6 C: X6 N
new Selector (proto.getClass (), "heatbugStep", false);
8 I$ c" X1 Q- z5 }+ G1 N& ^ actionForEach =9 z' y8 j q4 S9 @- \; B
modelActions.createFActionForEachHomogeneous$call
8 Q" f! Q6 K) ] (heatbugList,
6 r% u1 c% z& Z new FCallImpl (this, proto, sel,5 b* E3 c- Z8 h# `5 ?: q
new FArgumentsImpl (this, sel)));
/ w( w0 N% e% W- }: s } catch (Exception e) {3 K, q# q8 w& s9 d
e.printStackTrace (System.err);) z! D6 k" C- i; \$ w5 }
}
3 A7 ?1 |( U" k. x. G! V4 x + D5 p& w$ g2 t4 ?( g. n
syncUpdateOrder ();
( u* K5 e' _* N* T2 \
, p, h% [& ?" E5 I try {! S2 n9 H/ }+ a- z1 i
modelActions.createActionTo$message
2 J2 L+ L7 q% P7 B2 `9 F (heat, new Selector (heat.getClass (), "updateLattice", false));3 c% B k) t- m) I, D
} catch (Exception e) {) u- N% z+ H; X$ B) G
System.err.println("Exception updateLattice: " + e.getMessage ());7 z; E1 O9 |/ w1 s5 E. B! @
}
+ |1 N, n3 K' X9 f. m " v; Q" M2 e3 l% S% r9 ?
// Then we create a schedule that executes the) g6 @: }3 j" u0 o3 p7 V8 J4 W
// modelActions. modelActions is an ActionGroup, by itself it
+ \0 f G9 w3 N1 L+ [3 D // has no notion of time. In order to have it executed in0 Y7 M! ]' p0 B1 Q! L
// time, we create a Schedule that says to use the/ g& `- d" a) U3 s. H- H
// modelActions ActionGroup at particular times. This6 J7 A, J d# `. D6 J3 G1 Q
// schedule has a repeat interval of 1, it will loop every, `/ V4 w6 ^$ \' G3 h
// time step. The action is executed at time 0 relative to* M7 M, n* k) [" ^! z3 s+ z- V
// the beginning of the loop.
! B4 V: M J& L/ t7 |
. F R2 b/ g: `+ h% T; i // This is a simple schedule, with only one action that is+ j& c2 R' U* `8 E
// just repeated every time. See jmousetrap for more
4 z, S; v3 O7 L0 x9 v# y- ] o // complicated schedules.
2 F4 P- E2 v( V1 J& Z. C
% l+ k* h) z9 W1 [/ Z* V& s* z& R modelSchedule = new ScheduleImpl (getZone (), 1);
4 C) Y6 ?" b A8 c- ^ Q modelSchedule.at$createAction (0, modelActions);1 n; U. r" h7 d% f7 G* b1 O
! n+ L1 `) A' j0 Z U
return this;
! b" _ a- ^2 ?0 o } |