HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 Y. k z1 Y* h2 [9 i2 X& g- ^% x# e) U) j. p* ^5 w- m2 N
public Object buildActions () {
. |: T( q" o( p super.buildActions();
4 x8 u5 v4 B4 C: Z/ K: [
h1 h9 M# M/ Z6 h9 G) v // Create the list of simulation actions. We put these in
- J% U' S1 V6 T9 T$ G+ ` // an action group, because we want these actions to be; ?6 @; P+ {9 N; O& N( u' u F
// executed in a specific order, but these steps should
+ j# [# W) B- }6 e // take no (simulated) time. The M(foo) means "The message
; E, a0 ]0 v+ |( b; S) [3 D: g // called <foo>". You can send a message To a particular4 G9 q- V) [. J8 T2 m
// object, or ForEach object in a collection.7 i, x: b" C& R7 Y9 Z* u }8 I
; e c- e# w: B! V // Note we update the heatspace in two phases: first run
0 f; O6 J' R! p: G // diffusion, then run "updateWorld" to actually enact the
$ {% T% {: {* n, M // changes the heatbugs have made. The ordering here is
3 y. r* r' l% k: I9 O% S2 l // significant!
P% P' L6 L4 {- O& n3 }
: \3 e4 ~2 K( p; G8 b* h // Note also, that with the additional( K, V E0 Z. I3 w" H d5 ~; e
// `randomizeHeatbugUpdateOrder' Boolean flag we can Z! d$ J" V- ~" ^
// randomize the order in which the bugs actually run
* t, g) M6 f7 {; ^ // their step rule. This has the effect of removing any0 x2 R7 h; O1 M Y( U) Q
// systematic bias in the iteration throught the heatbug
, q7 Q: T& ?7 u2 }3 f* _; F; ^ // list from timestep to timestep& H2 X" Y% `3 }3 C% t
7 H& O; B7 e% B9 {0 l: s' v: T+ b
// By default, all `createActionForEach' modelActions have
$ \: N! q6 @ r // a default order of `Sequential', which means that the
$ V" d& J7 x4 z1 M/ `. k8 r // order of iteration through the `heatbugList' will be+ s+ P# v5 L. P/ O z0 g
// identical (assuming the list order is not changed
( M4 V; ]8 `- a7 M3 c // indirectly by some other process).
& o8 \5 c' G7 |3 q$ C- I' i% i 5 M' t. p" [) l, _
modelActions = new ActionGroupImpl (getZone ());
$ [# z8 y y0 u0 ?' U; u
. m% t- j) h, ]1 O* D9 d6 w try {
; |" H6 G$ E- d% | modelActions.createActionTo$message6 r1 A2 U! D5 c3 e- C
(heat, new Selector (heat.getClass (), "stepRule", false));
1 r' m4 L* \7 I f5 x } catch (Exception e) {
3 ^5 ^ t3 m2 O! B* T System.err.println ("Exception stepRule: " + e.getMessage ());( g, N$ k+ B4 d* I* N) a7 }
}& f( o; d: ]3 L* u6 d
, j* j p9 x0 i2 W
try {" j1 R. Y% s. B- }) A- C$ E$ I7 b
Heatbug proto = (Heatbug) heatbugList.get (0);8 X( m4 c. g/ M5 @
Selector sel =
, t; N9 [7 D* k# | new Selector (proto.getClass (), "heatbugStep", false);
# r5 @4 [* g& {& R3 o actionForEach =% M3 C- C5 Q4 N
modelActions.createFActionForEachHomogeneous$call
! o f! s1 O, ^5 Q7 Y8 V8 Z$ c/ { (heatbugList,
3 i! s$ }' @) ]; t; p' {2 c: f) W new FCallImpl (this, proto, sel,
0 O4 s2 I# t2 v* o6 k# o new FArgumentsImpl (this, sel)));
; w7 X! x2 F$ }& y1 Y0 }- a5 } } catch (Exception e) {
1 \: e) u& I4 V t: ^' l, R0 S e.printStackTrace (System.err);
& m* ^3 D [$ L7 G( @ }0 D6 B) S. T* ^3 y
. {; ~! d7 k5 U$ ?' Q; [" P, r
syncUpdateOrder (); [7 _1 n e3 c' h$ m6 r$ X
/ m3 T0 H8 z# \; |% ]+ _) M4 d* g
try {
- O3 |# _7 G' c1 F$ X6 l @4 F |' C/ X modelActions.createActionTo$message 1 `6 P. [4 N9 i: a, T
(heat, new Selector (heat.getClass (), "updateLattice", false));7 T: s9 T2 f/ [7 q* o% F
} catch (Exception e) {
" T4 U9 W( q$ D System.err.println("Exception updateLattice: " + e.getMessage ());
. D- A# Y4 h* v q1 [0 K }: u" r* T U. N, u) k% O" f. x
# t! c% ]+ `# }& s' T3 u8 E
// Then we create a schedule that executes the
. ?! P Q' T% g! r, \8 h // modelActions. modelActions is an ActionGroup, by itself it
9 O: q1 Y q* [1 O Y/ a // has no notion of time. In order to have it executed in8 J0 b+ B% N& W% f- h, s0 J6 x5 `
// time, we create a Schedule that says to use the
1 h( i ]; B/ ` // modelActions ActionGroup at particular times. This
: Z% c3 A6 q- x& p+ l // schedule has a repeat interval of 1, it will loop every( j" ]# x; b8 z
// time step. The action is executed at time 0 relative to
! D, d" W4 ?2 O; u$ W' Z // the beginning of the loop.
! V0 i8 M" O* N6 q4 a! x. V& e X( `" M/ {6 e' \9 m/ c! s
// This is a simple schedule, with only one action that is
" r3 I* Q" H/ f4 S* w' u // just repeated every time. See jmousetrap for more' L. `# r4 a% T6 n# p2 `/ X
// complicated schedules.
% f4 A( F8 p7 p k2 D
) ?7 k' r; y9 p/ O+ Y modelSchedule = new ScheduleImpl (getZone (), 1);( v8 k# n7 h8 V5 z$ |
modelSchedule.at$createAction (0, modelActions);, r5 I0 v: _' J4 M
$ A6 m$ A" N6 ]: O
return this; T% y; M i8 j! a# ?6 ^3 u4 X& t
} |