HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 d6 u* o! f2 e" V& B* o1 I q, a# R4 y F/ _% D4 m4 Y1 h. k, ?3 U
public Object buildActions () {
a3 A" L" E% v& N+ B% u4 Y0 Y; k super.buildActions();4 U( |9 L4 l, R3 t+ m( o
B; O, e+ X, c; t
// Create the list of simulation actions. We put these in0 {; `( i0 g5 u5 r/ k# s
// an action group, because we want these actions to be# \; q- v( S% ^0 w4 |
// executed in a specific order, but these steps should, {# h) i R7 z5 x% }% C r$ m
// take no (simulated) time. The M(foo) means "The message
$ j% t ^* S) D l: B0 y* v& @ // called <foo>". You can send a message To a particular' y9 o) n) f& e% u8 n
// object, or ForEach object in a collection.
/ Y% s% B2 u' p; _/ W ( O- H3 M& B( @& W& K
// Note we update the heatspace in two phases: first run/ F/ H v2 O r
// diffusion, then run "updateWorld" to actually enact the# M$ z. T& o7 J ~, }$ ?
// changes the heatbugs have made. The ordering here is( @ h8 z6 }: Q; `
// significant!
) }7 W( Y+ S/ v 6 B2 ?' k# {/ E- Z/ I7 `. y8 g% Y
// Note also, that with the additional
! @) K0 f( _! B // `randomizeHeatbugUpdateOrder' Boolean flag we can2 y. \& A; X d( q& N
// randomize the order in which the bugs actually run; F6 [# }2 g" H1 q, X( |" A1 X
// their step rule. This has the effect of removing any
$ ~5 R* P2 [* Y, _" M // systematic bias in the iteration throught the heatbug
( i4 g- g- [4 _2 V% V2 b // list from timestep to timestep) B1 f' V" a4 ^+ f! ^4 M9 [
4 g+ u1 o! k D( K$ z# {7 Y
// By default, all `createActionForEach' modelActions have! e6 k& w! j6 S9 o
// a default order of `Sequential', which means that the
" Q3 X3 h' q! C, X8 N // order of iteration through the `heatbugList' will be% U/ p0 D$ Y! Z4 C5 {. R
// identical (assuming the list order is not changed v9 P4 d+ }+ t: C' c
// indirectly by some other process).
! F$ b$ d) [# P9 k6 y. z4 ?5 m9 B . {+ a3 y1 ^' E L. P# X
modelActions = new ActionGroupImpl (getZone ());
% F& j: ?% A- I9 S% D+ Y. g& _) }, X1 w. m7 R
try {
( U' U7 Q" Y$ g3 i1 I+ ~$ H modelActions.createActionTo$message) e5 G* ?1 t" ?$ S; W- i& h) ]
(heat, new Selector (heat.getClass (), "stepRule", false));% e% U6 k! g. E
} catch (Exception e) {9 T; |- Z/ M* m( e
System.err.println ("Exception stepRule: " + e.getMessage ());9 F0 F) j% N' Z3 C. a$ g n
}! ]. H) d9 ~! X! A# `
6 i# E$ u+ _0 ^& `& a
try {. b$ F v; F: n! x! D }+ x% p; e
Heatbug proto = (Heatbug) heatbugList.get (0); S- }8 W @2 w+ f$ L
Selector sel = " q' g) ?& A% }+ U& L" c
new Selector (proto.getClass (), "heatbugStep", false);, W4 J# m+ l% A& P1 f6 u7 f3 B
actionForEach =
, T1 A% p" u% v1 i8 N4 _7 T/ R modelActions.createFActionForEachHomogeneous$call
2 `" y1 H8 E1 _9 j+ w! } (heatbugList,
$ `' p; e* Y6 `7 w6 o2 S' C& S new FCallImpl (this, proto, sel,! P( [5 p+ P! I& d# e1 [
new FArgumentsImpl (this, sel)));: k* ~5 ^6 z2 W/ b+ z
} catch (Exception e) { V4 j* N6 x$ s3 F! a! y
e.printStackTrace (System.err);; C) q4 G' I- F& [
}* K- M! o! a% i k4 V# V3 n9 U
5 N7 }& u a S$ \
syncUpdateOrder ();
% Y b/ q" R B, i7 C3 e0 x# ^; ]- v9 x6 Y8 _) X
try {
/ W6 R! \* {- R& y$ q1 T modelActions.createActionTo$message
8 A& h* S. N. h# ?; U (heat, new Selector (heat.getClass (), "updateLattice", false));
( D+ F [0 X0 w; |6 D, Q+ v } catch (Exception e) {
. r @; ^- B, l5 h1 g+ z System.err.println("Exception updateLattice: " + e.getMessage ());
* H6 |, f# ~: r }
8 I( z R5 ?' @# Y; L 6 F% Z, q2 V% z' v1 q
// Then we create a schedule that executes the
+ ~5 o* h2 ~4 z0 }6 k+ r2 V' Q // modelActions. modelActions is an ActionGroup, by itself it/ E9 b& o& V1 s5 n
// has no notion of time. In order to have it executed in- A1 ?- c, g" E6 {
// time, we create a Schedule that says to use the/ k, n7 \0 ]. e3 p7 ~) F
// modelActions ActionGroup at particular times. This
4 d7 h* i) {- G9 r5 Q // schedule has a repeat interval of 1, it will loop every
! q" s1 y6 x2 p$ _9 t. u" }6 X* X Y& B // time step. The action is executed at time 0 relative to
+ U) N. z3 N1 L8 I: G // the beginning of the loop.1 y( k& l) X' ` d8 g
G/ `8 ]$ K& |# H9 u7 L& w' I
// This is a simple schedule, with only one action that is
3 r* f+ z" \3 B // just repeated every time. See jmousetrap for more5 z+ v3 s( C( @" o4 |* a
// complicated schedules.( L' u( ^# }1 C5 i" o
2 b5 {) z: {# {+ G( s
modelSchedule = new ScheduleImpl (getZone (), 1);( q8 V' \$ ~9 z! B; m& @- n7 P
modelSchedule.at$createAction (0, modelActions);* x# q, B8 h& h: C- a
8 i' E9 G! p5 c/ q8 \2 F4 z
return this;! h m" c4 ^( ~) V; O7 l! ~) Q. G
} |