HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# |: v$ A& o% h/ Z
/ p) q8 {/ Q0 e$ }
public Object buildActions () {1 q8 E8 `8 u' i% z
super.buildActions();
+ q* X; c# W/ s& I- Y
; Q& R; C" L& X0 C // Create the list of simulation actions. We put these in
4 e6 x) q% x; n2 y' _ // an action group, because we want these actions to be; [: F6 a2 J) z2 H$ `' N5 [7 j) `8 v
// executed in a specific order, but these steps should
; w u) o8 S4 E/ e2 |- S6 ^" w3 V // take no (simulated) time. The M(foo) means "The message
) _2 N _# g; j" {4 B( u // called <foo>". You can send a message To a particular& u3 m; y f a
// object, or ForEach object in a collection.
3 o8 Q# S; C) r' T 9 h) U4 h( n6 V/ A( K6 ~
// Note we update the heatspace in two phases: first run! w) _( C+ s: C) ^- J
// diffusion, then run "updateWorld" to actually enact the
1 v3 U' q% k; \8 o- y# a // changes the heatbugs have made. The ordering here is) X4 Y/ I6 N f9 T% ^
// significant!% Q# a2 Q! m V8 o/ r, K4 M
$ Z8 P* a4 f6 H8 Q4 f1 {
// Note also, that with the additional
+ @6 A9 `/ w& r1 b8 z0 b' W# c // `randomizeHeatbugUpdateOrder' Boolean flag we can# P0 v/ ]: X8 ~/ E1 o- c
// randomize the order in which the bugs actually run
- A" z- u1 G% V2 d+ a4 X' k // their step rule. This has the effect of removing any
6 g0 J* ?2 Y- L8 G1 c, U' t: u // systematic bias in the iteration throught the heatbug
0 Q6 j4 w, N% @- T // list from timestep to timestep
5 K m& Z! u5 d0 m7 m \) U) s0 X& I
* x9 ?. g* D7 ` e // By default, all `createActionForEach' modelActions have' ^/ O! A1 W- ^2 n6 {6 d3 z/ R( t
// a default order of `Sequential', which means that the: j0 t0 d0 n; ?3 \( ^
// order of iteration through the `heatbugList' will be) p1 E: M a- ]( j# g0 N( v
// identical (assuming the list order is not changed
6 ]8 y9 }$ P/ z3 t // indirectly by some other process).
1 R$ ~; y/ z5 W: E " Y @" w( u5 l
modelActions = new ActionGroupImpl (getZone ());
8 C6 Q( v5 _+ w, O$ F! }9 k) U% S, {' r! ~# ?
try {
+ i4 u+ c6 U# C+ K modelActions.createActionTo$message
* e- t9 o0 W: C8 P5 j+ k5 U (heat, new Selector (heat.getClass (), "stepRule", false));
% A' a2 g* X7 a) G } catch (Exception e) {
7 Y9 M& P7 q* \8 v System.err.println ("Exception stepRule: " + e.getMessage ());
0 H% Y$ j6 Z* I5 D4 {. v }
. E3 y. R! M' U, y& A8 f
" l' I& z; I7 `( h& c3 u9 a# q try {
9 V7 P/ A/ T+ F+ j: f& B Heatbug proto = (Heatbug) heatbugList.get (0);
9 Q% ]( n% t; U9 r' r Selector sel = / a# u" x7 j- T2 f9 X
new Selector (proto.getClass (), "heatbugStep", false);
5 _4 o( w4 n0 u- R+ O actionForEach =. l# c3 [) M& P0 o3 n. a
modelActions.createFActionForEachHomogeneous$call
4 d3 \2 b1 P9 ?( J (heatbugList,6 `- K- R: l. D! w1 m- J6 T
new FCallImpl (this, proto, sel,5 i7 w4 y' v5 F) a3 L$ c
new FArgumentsImpl (this, sel)));
2 J$ Q2 V$ D) p9 Q: Y! z; s3 ` } catch (Exception e) {
, R0 H, P) @; } e.printStackTrace (System.err);! J1 x; B5 s6 n7 S, g
}# U( N' F) a) D. |+ x: l
, R. C1 [4 {8 {9 g% o6 [& w
syncUpdateOrder ();
$ o4 T# I5 [# }/ e. O8 y9 Q* a. q# |0 o7 j" G8 z9 W
try {' e! x; H- c# H& q6 W% l
modelActions.createActionTo$message
8 \/ F$ K2 \+ l (heat, new Selector (heat.getClass (), "updateLattice", false));
" r) V3 ?; W2 v# `$ X7 D& w } catch (Exception e) {$ f3 e% s& _* A! ~3 [. d# W
System.err.println("Exception updateLattice: " + e.getMessage ());
9 _6 Q; ?" H) n. D: c }
$ I) T- \+ _: l+ z: `, e6 s
, `1 {5 n" N8 \# F+ Q) Q$ B" [; D // Then we create a schedule that executes the
9 {* H' y, J8 ^& C* n; p) M A // modelActions. modelActions is an ActionGroup, by itself it" [; J, |" {' v
// has no notion of time. In order to have it executed in; H$ N; @* ?& m- L% L" n
// time, we create a Schedule that says to use the0 H4 P6 _7 C0 N2 V# I
// modelActions ActionGroup at particular times. This$ o0 Q( V# Q5 q: d3 h! |& @
// schedule has a repeat interval of 1, it will loop every+ i; e; X; M T0 X
// time step. The action is executed at time 0 relative to) ^; ? s9 E3 i: |
// the beginning of the loop.
+ _+ p8 Q5 _: l) e' Y5 ^% g0 |4 x2 M$ Z( N: S+ y4 ~/ k
// This is a simple schedule, with only one action that is
: A/ E% B$ k+ P* a // just repeated every time. See jmousetrap for more1 k- [" q. [& V
// complicated schedules./ F3 E5 d- c9 j* o; E2 t
6 ?6 Y4 k! M4 Z3 W modelSchedule = new ScheduleImpl (getZone (), 1);, g. R3 j' ~. J2 @- w
modelSchedule.at$createAction (0, modelActions);; U4 K$ u$ L* h" V
% s# e# x* [; ~7 d @ return this;
2 B# _2 _1 \, y q1 M' G7 d } |