HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( F* v+ ?" Z5 D+ w
+ k! B- y+ l I' b
public Object buildActions () {
. h1 T: @. L. B. f: f super.buildActions();/ v1 f" A* I) q
Y7 {) A* F+ d5 @3 }
// Create the list of simulation actions. We put these in
- ~9 H- |, ^4 X$ ?& Q' k8 {; o# [ // an action group, because we want these actions to be
4 X, V3 ^0 K9 ~+ v W* N // executed in a specific order, but these steps should
% J9 P& n5 c, U+ A% N2 z% E // take no (simulated) time. The M(foo) means "The message( X) v3 g+ |! t0 R! d& L
// called <foo>". You can send a message To a particular* U4 p* S0 e0 C% U1 g
// object, or ForEach object in a collection.3 ~0 S/ [& [+ {3 T
9 Y- a2 h% H/ j% o0 E! ^$ p // Note we update the heatspace in two phases: first run
' t) n. p3 H" F, o // diffusion, then run "updateWorld" to actually enact the. d) g/ Y2 n% o2 D% [6 t
// changes the heatbugs have made. The ordering here is. W5 `3 S# w+ t2 H; L. [0 {
// significant!- S* L, [' Q( R4 `
5 o5 n. [; }: ]3 H" R% @8 i
// Note also, that with the additional2 m* ^' w2 A6 ]5 _6 r. t( Q# B
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ y! A; W" l% G7 x // randomize the order in which the bugs actually run
! F" p8 g: b& n% V' P2 j0 e // their step rule. This has the effect of removing any
( u6 o i1 ~) M5 g1 w& U) e6 ]8 t // systematic bias in the iteration throught the heatbug
o, I. Y h6 Z, F // list from timestep to timestep
7 H7 D7 W) b5 D3 N! F
) Z# _- J, }9 R. p // By default, all `createActionForEach' modelActions have; }. q8 x' u" @
// a default order of `Sequential', which means that the
1 l1 Y6 Z/ k r+ ]$ f2 K // order of iteration through the `heatbugList' will be5 f+ i) R( e$ u3 ]' S
// identical (assuming the list order is not changed+ t: k# g- F/ C [- z
// indirectly by some other process).
5 u+ p8 b' j8 R4 G$ y- }; y$ E4 P+ E
" e& Q5 i. `( U2 I modelActions = new ActionGroupImpl (getZone ());
( G3 W0 q e% d- k$ w: |; t/ ^5 G/ `. W% ^8 M
try {
! O& K% }+ C' J$ |3 P5 i modelActions.createActionTo$message
; Y G' g0 o: k5 P5 e [- v" F. x( i5 X (heat, new Selector (heat.getClass (), "stepRule", false));$ L/ Z, l# v# {6 Y8 k7 X
} catch (Exception e) {% s, E& b$ g3 p! K' \$ X) n
System.err.println ("Exception stepRule: " + e.getMessage ());
9 o% t# N: u& l, L }) l7 G) W$ T8 H0 g
R; u# O7 @2 d+ d# a try {
, ^3 f5 y J- U Heatbug proto = (Heatbug) heatbugList.get (0);3 w! e: v' Y( a& S% D3 B, n
Selector sel =
8 r5 c0 m) o7 ^3 Z; q9 G- J new Selector (proto.getClass (), "heatbugStep", false);* {( J3 M7 s( A: u6 E, S* c
actionForEach =
9 u8 a( ~8 F, Z1 u! a* o* k modelActions.createFActionForEachHomogeneous$call
% H6 B& R# b7 r (heatbugList,
! J* c7 W% y, R& b) s6 t new FCallImpl (this, proto, sel,. b' G; U# R+ P
new FArgumentsImpl (this, sel)));! M# N& c8 }3 G
} catch (Exception e) {0 Q d! k: o4 c8 d; E( E% v( |
e.printStackTrace (System.err);. b2 p& t$ h) ~
}
. X; g! C9 W V0 T9 w D
% b, v, h0 C- H7 `, i syncUpdateOrder ();3 b$ H2 ]) d+ ?3 y
9 T& d7 o K5 J# w+ t& [0 n) X1 X
try {
( d& j2 w, \5 _; I+ s modelActions.createActionTo$message
! ^& _/ U2 q2 L) Z- Z! |+ u (heat, new Selector (heat.getClass (), "updateLattice", false));- v! b& o+ B3 ^$ p* s$ v+ m
} catch (Exception e) {5 G$ S* b+ e4 B6 v7 P7 a4 m7 @6 [& `
System.err.println("Exception updateLattice: " + e.getMessage ());1 J6 h( J2 _# p F
}% S+ Y a7 P1 ^' ]6 e5 ~
9 N' {. u( j3 a0 H" o // Then we create a schedule that executes the Z6 m3 l+ P. b
// modelActions. modelActions is an ActionGroup, by itself it
* x$ `" H' `! u5 r a // has no notion of time. In order to have it executed in
$ P8 T4 K3 C. t8 I7 P9 \/ K // time, we create a Schedule that says to use the5 J) O: P4 Q7 t, T$ D* y3 C3 V
// modelActions ActionGroup at particular times. This
& K8 \% I& q: k; j, M) I& h' N // schedule has a repeat interval of 1, it will loop every/ N5 |+ d" {$ E0 p' z/ d
// time step. The action is executed at time 0 relative to
- T5 ^9 G3 z7 u3 ]( a4 ?" E( K // the beginning of the loop.: j( v" t6 X7 a" l5 H, i
* Q2 N: \$ e0 |' Y* L // This is a simple schedule, with only one action that is( R3 v; I4 v& h8 \8 ~- i6 `4 d
// just repeated every time. See jmousetrap for more+ a; b* u9 I3 P* S9 y
// complicated schedules.
* f7 O8 ^$ z% M) q ' a( Q; _7 ^+ A% B
modelSchedule = new ScheduleImpl (getZone (), 1);& W9 g8 S0 v$ `! K, q8 K
modelSchedule.at$createAction (0, modelActions); ^5 `, K/ O: `: ^
6 X- v, Z. i% h4 | return this;
( j1 Q* f+ o& P$ U( z } |