HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" N/ O7 z1 _5 l1 W
* ?3 c7 v: @4 R8 s% ]- ?
public Object buildActions () {: L7 m" W: N# V* |
super.buildActions();
8 }2 i5 i0 t9 t. ]3 m: Q9 s, T
# P8 [1 j' a! q/ e$ W; U+ L7 h // Create the list of simulation actions. We put these in
; y; m( Q$ f8 c // an action group, because we want these actions to be6 L7 C) l4 {+ w8 @8 H. U# t4 q5 X
// executed in a specific order, but these steps should. `( F! N( j4 l# b! Z; F
// take no (simulated) time. The M(foo) means "The message8 F0 C5 _) x3 k3 D* \! I
// called <foo>". You can send a message To a particular9 N; s7 H, K. a! }% q" A
// object, or ForEach object in a collection.
: V L0 U& p& {3 X x- A" N
& T5 l" l) L' Z2 W$ t1 H // Note we update the heatspace in two phases: first run
! a6 m- @9 Q! C$ ]' j- V // diffusion, then run "updateWorld" to actually enact the8 l7 x* ~, M& [
// changes the heatbugs have made. The ordering here is5 x2 Z/ H9 J* S! y1 B A
// significant!
5 r0 [: o4 e* U. n; r4 s ! m( d: p# ]/ A& }2 g4 a" m( V
// Note also, that with the additional
* q9 ]( K, l; f1 y0 u7 @ // `randomizeHeatbugUpdateOrder' Boolean flag we can" t6 o* m* J8 G) r6 d6 i, q+ D
// randomize the order in which the bugs actually run- L/ r6 u4 B; {0 p I
// their step rule. This has the effect of removing any
5 m3 v4 i+ L9 [6 A( k4 Z3 H // systematic bias in the iteration throught the heatbug
( X! l) J3 t3 X3 Y n // list from timestep to timestep. v( z: f4 U- \& y# \$ T1 n0 p) {
, Y: U5 b" u$ }+ a // By default, all `createActionForEach' modelActions have+ _" [% V, C/ q! d/ _7 g6 o" r
// a default order of `Sequential', which means that the
& g5 b, ~2 D6 r/ _/ ` // order of iteration through the `heatbugList' will be. s$ B8 j7 S; x6 I" l2 `+ Q, q* x0 n
// identical (assuming the list order is not changed! V$ x2 x' R+ [ f/ _; { |% X- z
// indirectly by some other process).
2 n! V8 d9 N+ B4 G1 u7 k7 e1 ? # ^1 v+ g! n I6 g/ X5 P
modelActions = new ActionGroupImpl (getZone ());
0 X1 O7 T4 M1 [, }# F1 o& ~0 Z, |5 S8 M7 R: S
try {: L: L4 R1 o7 O7 R
modelActions.createActionTo$message' n9 Q7 `- {# b
(heat, new Selector (heat.getClass (), "stepRule", false));
; x; q0 l! \& z; F f6 s' Z } catch (Exception e) {: l0 Y) f& S2 M
System.err.println ("Exception stepRule: " + e.getMessage ());
8 U( X0 Y# t4 H }
+ X. h5 _( ~5 m6 _* j3 U
p1 F9 o% s, Y5 U0 ^9 L& r try {- p0 f8 I: J! U9 O: C8 l0 s
Heatbug proto = (Heatbug) heatbugList.get (0);
: |* c: W1 y# h Selector sel = 9 J: o1 I9 n5 N# L3 B1 q. J8 ~0 J
new Selector (proto.getClass (), "heatbugStep", false);
6 a! T; D7 k X( D1 E8 K: [ actionForEach =
, u9 N9 B* E* b7 V modelActions.createFActionForEachHomogeneous$call
- V Q& R% T# D2 ] (heatbugList,
: l- D9 F e# x) D3 t6 ` new FCallImpl (this, proto, sel,! y* F: w1 n7 w4 l$ w
new FArgumentsImpl (this, sel)));1 L! z) U3 M: r& \/ |) w
} catch (Exception e) {% D- O1 C9 N9 O7 Q/ ?: |
e.printStackTrace (System.err);
9 k1 Z6 y' B) r8 B4 z: M% L }
5 |; l& l6 ]8 z# W7 A ' C4 f4 a* g+ A" S) V& _
syncUpdateOrder ();# x: ~% ?0 h& k3 W9 U
! L! y o! ?8 o+ H$ I* E1 ?9 i: P try {' H. Z) x/ n' q
modelActions.createActionTo$message
0 P% n7 ^$ ? a! \" B4 U- e (heat, new Selector (heat.getClass (), "updateLattice", false));9 T/ w# a0 O5 Y, M4 I6 _3 X, I
} catch (Exception e) {
$ u/ N4 X& A- x' ?" [9 C System.err.println("Exception updateLattice: " + e.getMessage ());
p' U- N9 T- l, p' u }
. R7 }9 |# j/ a( Y ~
3 O6 v( h! T' r B5 ?5 D/ e. b // Then we create a schedule that executes the
- q s6 I$ ?! C. M2 \2 |" x // modelActions. modelActions is an ActionGroup, by itself it, T3 r3 ]" a4 G' n# B
// has no notion of time. In order to have it executed in) u: G$ X( q* m- V5 A, l
// time, we create a Schedule that says to use the4 R; H9 ~) P7 m5 ]$ _
// modelActions ActionGroup at particular times. This; B5 c) q0 N/ V q- _
// schedule has a repeat interval of 1, it will loop every' Y4 s/ E) ?" W+ p% m, _
// time step. The action is executed at time 0 relative to
7 E1 U; o% v) m8 B# n5 n // the beginning of the loop.. b5 N, Q8 _/ \: _$ S# M6 A
7 C5 @- n9 s) w9 @# q |" p
// This is a simple schedule, with only one action that is- T$ Y6 f( E' C4 J
// just repeated every time. See jmousetrap for more
, e' M0 k8 [# ~! @7 X { // complicated schedules.' S9 h2 W) v1 j, O7 A9 p
0 }9 C( I3 x1 i3 [
modelSchedule = new ScheduleImpl (getZone (), 1);0 v+ M2 c& x0 m5 h. Y( h$ F" _
modelSchedule.at$createAction (0, modelActions);% x9 i5 G# j' a9 b7 [
! h& {5 m& N7 K t1 @
return this;
7 B* O9 t% j) v } |