HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 m) T: q7 i$ ~6 Q) N
* ^7 }, l+ }8 Q. C
public Object buildActions () {
4 Y- y- I$ g0 b; D5 j) D super.buildActions();
9 D6 s! c- y- |3 P6 ~( R
, Z3 r8 i! `- S3 w0 d3 e // Create the list of simulation actions. We put these in, q( w/ _: s% d- ~9 O8 M% k
// an action group, because we want these actions to be
: u' O7 J* x5 O4 }" U // executed in a specific order, but these steps should/ F; L7 Z: v( d
// take no (simulated) time. The M(foo) means "The message1 q9 O. e% b, g0 M1 `" Z/ v9 K/ ~
// called <foo>". You can send a message To a particular- @1 r. Q" Y0 e Q: v& L
// object, or ForEach object in a collection.3 F1 j) G& e+ g5 \/ c" Y1 k
( J0 ]. k9 ]7 Q% H6 Z2 P! C // Note we update the heatspace in two phases: first run
; t- k% B- J; g2 W // diffusion, then run "updateWorld" to actually enact the
! c; D3 x7 r" q }& Z( A7 A0 \0 v // changes the heatbugs have made. The ordering here is
9 ?; [: j0 Y7 ^% o // significant!8 n# N3 ^( n1 @0 i' t% ^! N
% R6 ?" A) C; {. x
// Note also, that with the additional. v; u) x0 L; M4 _5 R: e
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ D+ ~3 O/ [* ?7 e( ?1 X // randomize the order in which the bugs actually run
, S* h7 l5 s1 q% O+ c" E) M // their step rule. This has the effect of removing any
' ]9 U; I& m- d" q& y+ t6 p // systematic bias in the iteration throught the heatbug4 S- ], Q$ K: ?1 V3 u
// list from timestep to timestep
& I3 }4 z' U6 H3 X
` W0 p5 Z1 J$ L# O: ] // By default, all `createActionForEach' modelActions have
$ Q/ x. }6 r: F2 S, c // a default order of `Sequential', which means that the
2 ]$ m3 `/ E+ S: Y) B // order of iteration through the `heatbugList' will be$ y/ G. r& P+ l. P6 ?3 z
// identical (assuming the list order is not changed$ L8 j* z( U- X9 s, J- s" C; R' S
// indirectly by some other process).
, U$ d) M6 E! W3 C
) `$ u4 b/ u! o9 y, c2 D- t5 Y+ L( |# F modelActions = new ActionGroupImpl (getZone ());0 W( o+ g7 L3 A% l3 O
( z- K, D, W6 Y7 o try {
' {0 D. d5 [; Y( c! m( P l modelActions.createActionTo$message
4 ?( ?) _% I/ q1 [- F4 | (heat, new Selector (heat.getClass (), "stepRule", false));
4 P# y* F1 C" Y, K9 `$ N3 e } catch (Exception e) { q: B8 P7 \, a* a8 E
System.err.println ("Exception stepRule: " + e.getMessage ());$ g& T0 Y t- G" |# y
}" `7 i6 a6 L" ~& d# a3 u
3 O' W5 x' M2 l$ c- P try {$ Z7 x/ q L) E7 w3 ], ^$ |
Heatbug proto = (Heatbug) heatbugList.get (0);
$ e, `* d2 @8 d" v, O' c: k' D7 F4 q Selector sel =
6 p _ Z: @6 P* o new Selector (proto.getClass (), "heatbugStep", false);
. m- ^+ F8 p& M( y actionForEach =
. T- f7 l, H& ?/ @* M' ~4 o modelActions.createFActionForEachHomogeneous$call* Z7 _7 L( {/ j5 s
(heatbugList,5 Q2 |7 W3 {. m) a; ~
new FCallImpl (this, proto, sel,2 m$ ~7 Z' [7 F. W' j. @' n
new FArgumentsImpl (this, sel)));; G- T$ P6 k1 i- j5 I8 a% B
} catch (Exception e) {
+ m4 O* d7 T) L. i# z* s e.printStackTrace (System.err);6 r" z s# I9 Q' H) f2 |4 [+ V) t
}+ P& x; z) o+ Q; t6 O9 U& u
. d! f7 d$ D$ O8 T; | syncUpdateOrder ();
6 x2 P! P) f/ h5 V: Y- l
) n m$ {. r# d& j0 |7 B9 L( k try {) t' f$ d5 h% U+ l! C
modelActions.createActionTo$message
/ [4 L: e$ |# R! P9 s5 e9 v' k8 u (heat, new Selector (heat.getClass (), "updateLattice", false));
/ p# V t( J& [ } catch (Exception e) {; @6 k: Q' t8 D; d4 w2 t E
System.err.println("Exception updateLattice: " + e.getMessage ());
/ ~3 n J1 x$ \& J, s }
: S7 t+ g/ D- F U
2 L# o0 ?6 H6 s/ D. W% l F // Then we create a schedule that executes the
' ~1 C9 N2 ?' S // modelActions. modelActions is an ActionGroup, by itself it
$ i3 D# K$ B; ` // has no notion of time. In order to have it executed in! I/ K: r% y: E- i" u4 Z
// time, we create a Schedule that says to use the
) q' u! M1 l# m* |+ Y2 d // modelActions ActionGroup at particular times. This
* t' R0 K- `5 q& S8 z // schedule has a repeat interval of 1, it will loop every
# u4 x- d$ w3 H5 S // time step. The action is executed at time 0 relative to$ J# H' j) X! x# K4 G$ j* ]
// the beginning of the loop./ l& m% @0 Y% u8 a7 R
. N8 W5 H, R( h1 v3 H- T, Y9 x G // This is a simple schedule, with only one action that is
! M9 a' p4 a! H) A5 ~: y9 I. c // just repeated every time. See jmousetrap for more7 |' q( g2 X4 @0 m$ O
// complicated schedules.
/ K8 t; {- A7 r/ B, @4 R6 b
! g7 K( D+ n, h4 B, s1 p modelSchedule = new ScheduleImpl (getZone (), 1);0 i! Y5 ^ p/ Z$ H( c! I# i
modelSchedule.at$createAction (0, modelActions);3 w4 S0 S( M9 Y6 }
$ }2 G0 h/ m# |; j2 x& V
return this;
2 V# Z. u( q. i' D& M! E: W( R/ O( e } |