HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 V. T# [3 M4 }( F0 I. u, F
# A* h. r' Y* a
public Object buildActions () {
5 I# G5 j' x4 j- q, ], X super.buildActions();
5 k6 O+ E- F1 Z- j+ F$ P: Q: n' D
# `; }$ j) @% Y: r' z/ k // Create the list of simulation actions. We put these in
2 @4 x Y ^& z( G* S1 ]" ` // an action group, because we want these actions to be/ j* n' w; j( Q. k0 [, ?. z6 f
// executed in a specific order, but these steps should
" B! k, v3 r) A7 U6 l3 ? // take no (simulated) time. The M(foo) means "The message( y) y' |9 Y+ Z* y
// called <foo>". You can send a message To a particular
& n. X7 D% f4 R9 n2 _% w- f // object, or ForEach object in a collection." f$ I/ o$ D; `$ k( x! l! g
f! r& @1 ^& b* a( C: ^ // Note we update the heatspace in two phases: first run$ Z/ J! D: X* y; b' M# b
// diffusion, then run "updateWorld" to actually enact the
+ ~. g5 P; o9 }6 S* ?; X // changes the heatbugs have made. The ordering here is! v8 f9 N* _; a d
// significant!
, q- D5 E1 m5 l
% ]! }8 C( N7 B" r w // Note also, that with the additional. h0 ^0 v5 t0 M' u$ V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 f) u+ F2 [0 U4 l( ^$ { // randomize the order in which the bugs actually run
' \) q* h0 A% G+ |7 W // their step rule. This has the effect of removing any7 k/ i h/ H& l- \9 Z: V
// systematic bias in the iteration throught the heatbug
6 n* z3 o6 F, J // list from timestep to timestep/ [5 ~1 O5 w& E- ?6 U1 y
( D, @ V- }2 [( o: d // By default, all `createActionForEach' modelActions have
% h+ I1 b( L5 ]+ F1 g$ L3 G // a default order of `Sequential', which means that the
1 u h1 S# q8 n; ~/ `' h7 T/ k // order of iteration through the `heatbugList' will be K8 p: d" v" m. A: T
// identical (assuming the list order is not changed
6 ~1 Q/ o5 L. P% s& X& f3 o9 ? // indirectly by some other process)., g& i( W) i6 u" l6 Y; _2 t
_( `6 @" L) F, G/ k: C* F
modelActions = new ActionGroupImpl (getZone ());
. a. @. e- G) ~2 A1 S: q& e& P$ I* r' \/ c" G
try {+ o% B3 B( A. X
modelActions.createActionTo$message: R( }4 R7 n: F$ D: x" k9 g) X
(heat, new Selector (heat.getClass (), "stepRule", false));) K. D& @! D8 U- z
} catch (Exception e) {
2 O" z2 I" c( s/ K. E | System.err.println ("Exception stepRule: " + e.getMessage ());% W* Q' w/ g+ t9 c4 M8 C
}
2 \% }0 y |$ U: A% m
- {8 |# R) W4 l3 _ try {) q8 ]5 R0 q; J! {# x% V
Heatbug proto = (Heatbug) heatbugList.get (0);. z5 o; `& V9 U$ h ]
Selector sel = ! s9 {# f3 t& r1 d
new Selector (proto.getClass (), "heatbugStep", false);
0 P. C L" T2 |3 W! i# m$ _2 a actionForEach =
1 e9 _0 w: n. _" N* y modelActions.createFActionForEachHomogeneous$call
$ Z6 P/ d; ?9 \2 Q$ T( v (heatbugList,4 K$ n+ F1 L# I
new FCallImpl (this, proto, sel,& i" ]2 ]. I7 O: P
new FArgumentsImpl (this, sel)));- Y* m# O$ D! w6 `. ?
} catch (Exception e) {
: K& ?/ K# }' O( C& i0 | e.printStackTrace (System.err);
2 U2 p/ X* H1 Q. Q; T }
* Y. ~1 m; D; Z. D; ]6 I( F: D
# O% U# J- m; S* o5 c. L syncUpdateOrder ();
: q# F% b2 W6 ]/ U: w" }
) G8 ]8 b: N; f X- h2 f2 i try {/ h; ^. Q: ~# ~& s
modelActions.createActionTo$message
1 Z1 L0 e# Q- \9 j7 a$ `( A (heat, new Selector (heat.getClass (), "updateLattice", false));0 z" X/ |9 V E5 k7 b4 \! l1 N
} catch (Exception e) {
. \( F1 D3 c1 G System.err.println("Exception updateLattice: " + e.getMessage ());( H2 d# b+ k) r3 g9 r, n$ p! M3 O6 w
}
1 U: D% l) f' h3 W$ S ~
/ } r3 A8 }% R# Z // Then we create a schedule that executes the
( E* d: L( g) C7 n7 [& ~9 o // modelActions. modelActions is an ActionGroup, by itself it( X& b+ F B/ a* ~* o- f. L
// has no notion of time. In order to have it executed in
9 j% e" O1 r0 r/ f) e // time, we create a Schedule that says to use the
1 B9 M e0 }3 Q' `4 b! v // modelActions ActionGroup at particular times. This
" ] G- O4 Q* ` // schedule has a repeat interval of 1, it will loop every
: q5 W- C% J5 y) l // time step. The action is executed at time 0 relative to
1 {. Q) S6 M6 S# {$ n+ b( T/ Y // the beginning of the loop.; g Q( ~# k# p$ C! @' u
) X5 a3 T \" @8 c6 z q! x
// This is a simple schedule, with only one action that is
* i! C5 b1 Q5 i, l, n Z& g7 Q7 v+ Q // just repeated every time. See jmousetrap for more) W) ?0 o! z& z3 a: Y8 Z Z' v4 o
// complicated schedules.
" B4 Z9 ~& X8 T, C' R6 i . y, G' X7 q- D' t
modelSchedule = new ScheduleImpl (getZone (), 1);0 ^) E! G& |* `# Q8 n
modelSchedule.at$createAction (0, modelActions);
9 g8 G* q3 O4 l) u # `$ z# f Y: H% [& H
return this;
" h. H' o* B' [& u' r8 ] } |