HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- F( w6 T6 C! }- |7 m% H
8 H- R3 g) @4 S) Y7 W public Object buildActions () {* V% `1 @. A2 P# O1 ^2 k
super.buildActions();
& `0 y4 ~1 w/ v2 W' q 3 y) W, A5 z! A9 K9 }
// Create the list of simulation actions. We put these in6 J; U0 K8 C1 u* D4 J- ?
// an action group, because we want these actions to be
) |, m; V% i' K3 c$ z // executed in a specific order, but these steps should
8 `( D, ^7 z# |. j // take no (simulated) time. The M(foo) means "The message t r! w4 ]! d( n* b
// called <foo>". You can send a message To a particular
6 m' G4 P, v1 H: y" g: R" n // object, or ForEach object in a collection.6 W% r3 A% v* ]
- F8 k, p- d" T+ b' ]1 C: [ // Note we update the heatspace in two phases: first run6 r* w1 {& K* U
// diffusion, then run "updateWorld" to actually enact the
" s. E: V. @% w* C- ] // changes the heatbugs have made. The ordering here is
8 Q& G: B4 m9 R4 s // significant!
1 [4 P" `1 g ^
) H" Y! U, z8 H% e3 } // Note also, that with the additional3 l, k+ F9 v! e+ V X0 E/ }! ^" g
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: P3 Z7 F1 Y' \/ l# p // randomize the order in which the bugs actually run
5 ~$ a/ k; |9 _, X // their step rule. This has the effect of removing any
- c( z! t W3 c2 J) @/ ]! K // systematic bias in the iteration throught the heatbug' Q: ~/ Y3 I2 P# g6 `
// list from timestep to timestep: B# @3 ^: j$ H2 j4 I
. b5 o" X7 l8 q! f$ m7 c5 ]: r
// By default, all `createActionForEach' modelActions have
- t2 C" U" {# W) ? // a default order of `Sequential', which means that the3 p! F2 G8 Z9 s3 a
// order of iteration through the `heatbugList' will be6 r$ p2 ?( }: W+ S1 \5 L: r
// identical (assuming the list order is not changed
* L0 U8 q x( M // indirectly by some other process).: x$ _) \* Q% A
- D ?0 k0 h8 Y0 I modelActions = new ActionGroupImpl (getZone ());
! u- ]$ f) e1 v. U, I7 T! Z
$ B; k5 Z) e4 x, u3 A1 f6 g% t try {
% T! i& L- C# A' p% f modelActions.createActionTo$message
$ I A" H, c/ D# w' Y+ J2 _ V- W (heat, new Selector (heat.getClass (), "stepRule", false));. Y, `" {3 h8 T1 \4 L- O7 L' g
} catch (Exception e) {
- b* C! d9 m+ g2 |$ y System.err.println ("Exception stepRule: " + e.getMessage ());2 I/ x" k f. t" e& x
}
: a8 n% l K+ ?9 A8 R
q4 L* Z& ~9 b try {' T# | |4 v6 G- k+ H% r
Heatbug proto = (Heatbug) heatbugList.get (0);3 m& J+ ~8 ~: S8 }$ d7 \7 w7 b+ o
Selector sel = 7 d' R, v- c6 Z& l5 u
new Selector (proto.getClass (), "heatbugStep", false);
+ ? |+ w* Z0 c actionForEach =
6 J2 | w* u0 @/ G- J- Z8 i modelActions.createFActionForEachHomogeneous$call
1 u& C1 y p1 T# m f (heatbugList,
/ s+ ^5 B2 \ E* A9 _: o new FCallImpl (this, proto, sel,
/ o. Z4 l- C" s/ Y2 \$ B* a$ Q4 X new FArgumentsImpl (this, sel)));
4 W9 E. W5 U6 G8 ^ } catch (Exception e) {( g0 Q' ~/ b, z$ |
e.printStackTrace (System.err);$ P# C$ B( e5 w3 m$ T
}! p1 L$ o* y* c7 Z2 S
, |* b+ ]* y4 m- D
syncUpdateOrder ();
# t5 C# R- H$ @# t" b
- R9 `: z, n. U$ k5 n$ B" l, K4 C try {# P- I) M( U1 Z. V4 ^+ c
modelActions.createActionTo$message ) G2 g1 f7 |2 d- { G0 H
(heat, new Selector (heat.getClass (), "updateLattice", false));, C A% h* y& p; M# T& z1 V
} catch (Exception e) {
1 V/ L& R0 }7 t System.err.println("Exception updateLattice: " + e.getMessage ());
. D$ X. r5 O2 ~( B/ I. h }
1 V' D0 A! L4 u/ P4 z2 ` 0 p9 s5 Q9 T* r3 U% u
// Then we create a schedule that executes the
6 R$ L; S+ m# u' p* d // modelActions. modelActions is an ActionGroup, by itself it4 b4 A1 A- |/ M' v
// has no notion of time. In order to have it executed in1 O% e, c! i" S, Q- Q9 F6 y$ m
// time, we create a Schedule that says to use the3 V9 W4 y7 q8 |7 L; O9 C5 o
// modelActions ActionGroup at particular times. This
7 p; t5 ]9 X. v$ P0 a2 J. O // schedule has a repeat interval of 1, it will loop every9 g; W C& O" B9 m, W# _* R! M
// time step. The action is executed at time 0 relative to
( F' o! @2 J6 @4 }, ]" a // the beginning of the loop.) @9 b9 d' C3 ]2 O5 j) b9 h P
3 c+ ^$ B3 e4 w* v // This is a simple schedule, with only one action that is/ l; i4 E: m& T& r2 z: l- H3 T
// just repeated every time. See jmousetrap for more: S8 P! i) `3 P5 t
// complicated schedules.
( c' A! t$ V! }5 N& Z . q/ Q' s5 w t" _9 x
modelSchedule = new ScheduleImpl (getZone (), 1);# z! s+ G: I4 [3 R: w% v' q
modelSchedule.at$createAction (0, modelActions);/ D- x' V' _: F/ I1 l
$ J4 h' m+ l5 ^9 A% G/ P! _ return this;
4 `2 o3 u% E9 G O } |