HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, j/ G2 u. U$ R7 w
& Y* z* I* @; y- k$ Z& p5 K
public Object buildActions () {- `8 `* ?9 s: i+ m# ^* ]" s
super.buildActions();
) C' F0 H% h# J ; r5 w6 F2 Z% p: `* |, @* t& O5 K I
// Create the list of simulation actions. We put these in
9 U ^- @+ b. Y. U ?: x8 R // an action group, because we want these actions to be9 Z# ]4 |" z M% H6 L6 d
// executed in a specific order, but these steps should
' M( U3 d8 D% L5 j: Z // take no (simulated) time. The M(foo) means "The message' z6 z- D. z/ v& Q3 }
// called <foo>". You can send a message To a particular
- [% F- j' k8 {9 d0 o) N // object, or ForEach object in a collection.
: c, V6 D$ w. k7 q( G6 v * N9 v+ J$ }% D4 `! y
// Note we update the heatspace in two phases: first run
1 c( q/ k( \8 X" H8 u1 F: P; c8 f" B0 w // diffusion, then run "updateWorld" to actually enact the& D7 h4 S7 f. }+ |
// changes the heatbugs have made. The ordering here is4 _9 a& I$ e. w1 F( }
// significant!) G7 Y; g: R/ t4 |" s' x" b" ]4 v
& k; O: Z5 w: _' x9 Y. q( N
// Note also, that with the additional2 S( L+ b8 @" V/ s
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 c7 M% r4 R, W! i. I! U
// randomize the order in which the bugs actually run
: U) t1 h* w4 B& d# e // their step rule. This has the effect of removing any" s& \( j9 G% _ j# B. H/ x
// systematic bias in the iteration throught the heatbug
% K8 U- ^( X. l% m" w6 T // list from timestep to timestep* n5 @9 U/ B' |% d; J, I b3 e
! _9 n. A! ]+ s: M: J+ n3 P // By default, all `createActionForEach' modelActions have
! S5 s3 r4 e+ N2 g // a default order of `Sequential', which means that the
8 n1 D6 L% ~0 r; J- ` // order of iteration through the `heatbugList' will be
3 ]9 D1 a4 c; a // identical (assuming the list order is not changed5 X# v3 C+ U5 ~& G% V
// indirectly by some other process)." W" k6 W* J6 k8 }* c( `9 [* r
" [2 B) h9 U' b! W
modelActions = new ActionGroupImpl (getZone ());$ \# z$ u; G1 ^6 k! w* A
, _2 u& U# t7 O2 q$ B! Q4 i2 Z$ M, | try {
* T9 L; f; E( n4 ` modelActions.createActionTo$message+ V+ Q/ w2 d9 G5 ^, _! i4 L
(heat, new Selector (heat.getClass (), "stepRule", false));# Y. l: Z" w) W% i
} catch (Exception e) {
* K/ g/ Y$ U; X2 g4 @* B System.err.println ("Exception stepRule: " + e.getMessage ());
, h' [9 Q" q) b L }: u, d: l) @9 l5 n
5 |! T) M0 ?$ `) J! W, Q( g try {
! v; V2 g! Z* s/ m5 p Heatbug proto = (Heatbug) heatbugList.get (0);
/ U. E5 E+ |% i0 c Selector sel =
" U- J) m' I' p+ r& r6 i& @4 a- q new Selector (proto.getClass (), "heatbugStep", false);
% A' M1 `8 k2 j actionForEach =
" P B: ?/ l; e4 S3 B' u' O* x modelActions.createFActionForEachHomogeneous$call! |( y% P7 Y9 D
(heatbugList,
4 C; D- `& i% r/ R new FCallImpl (this, proto, sel,
V" y6 L- q3 r7 B8 j$ q' m% {/ B new FArgumentsImpl (this, sel)));
9 W/ \) x# {2 A- f& m7 {+ b } catch (Exception e) {3 v, [6 [: }2 H, E0 f$ z
e.printStackTrace (System.err);
) Y3 \. }# d# G H+ g9 c }: y! w' ]: l. M! k) g
8 ]$ V" `% F& C) _9 B5 m$ ~
syncUpdateOrder ();9 h+ J8 r+ d# |* p
. a% K% i5 ?9 v try {
( n; F/ L6 j4 @' R" g+ G/ K3 ^+ \ modelActions.createActionTo$message 0 g7 w2 O/ W# f9 O
(heat, new Selector (heat.getClass (), "updateLattice", false));$ U" ^$ A2 U2 K Z5 z
} catch (Exception e) {
7 y8 V; x5 K) {. J System.err.println("Exception updateLattice: " + e.getMessage ());
+ M& f; [5 `; y4 R& `! j$ Z }
& s$ S4 ^$ n7 z% k- F
8 |7 E/ Y# U7 v6 P // Then we create a schedule that executes the8 ~( A$ E& I; M8 v/ n1 z
// modelActions. modelActions is an ActionGroup, by itself it
- ?) w# n6 b5 L3 x8 i, ?9 L9 P // has no notion of time. In order to have it executed in: ]- K# v8 m7 @% m
// time, we create a Schedule that says to use the
9 K$ e0 b# N! q2 F. q4 A$ y: d( h // modelActions ActionGroup at particular times. This
% m/ b4 X; P3 F8 R0 ^* J // schedule has a repeat interval of 1, it will loop every
% \, |# @ t0 y' j% [& } // time step. The action is executed at time 0 relative to$ G% _; N2 }$ B/ q) h3 `5 C
// the beginning of the loop.
o; v0 y( ]2 e$ V( f
$ D, P( _9 Z7 @ E // This is a simple schedule, with only one action that is. x, A0 S8 c4 i2 ^' k- X6 b
// just repeated every time. See jmousetrap for more0 Z7 s" _7 W2 l7 s
// complicated schedules.
8 ]1 K" r F9 Q* X
$ s' }" H; W x. I' Z modelSchedule = new ScheduleImpl (getZone (), 1);$ V1 u/ Y9 o5 e$ X. ~' J7 `
modelSchedule.at$createAction (0, modelActions);/ ~& j# w6 Y( n! v# x
# w0 [. F Q! b1 E* D2 l2 v9 d# J6 _ return this;
* t4 z$ R! ~1 v( z9 H; @ } |