HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! k0 D' W0 q; F; n" K: K# G) t/ L; f- `9 h5 E* R1 l
public Object buildActions () {
8 P* G# P0 b9 R9 z super.buildActions();
% B0 s5 V3 J2 }6 I! L
% E" c( F" D& a* [$ t9 I // Create the list of simulation actions. We put these in8 B+ @! V! ^& U$ `; Q0 W
// an action group, because we want these actions to be6 m# c/ e& _8 _: G8 w( W& o8 [" I5 |
// executed in a specific order, but these steps should# z- B N5 _2 h( w9 k8 J; q
// take no (simulated) time. The M(foo) means "The message
2 [: u3 |1 M" p { c // called <foo>". You can send a message To a particular
0 I' ~& Y+ s. {+ V% q // object, or ForEach object in a collection.: p1 x/ }2 Z y+ O
: e( p: {' j3 h2 L7 h5 p" J! _ // Note we update the heatspace in two phases: first run% `- r0 a) Y) O# M- s* B
// diffusion, then run "updateWorld" to actually enact the+ V- U% i! T# L" c5 k; k, ~
// changes the heatbugs have made. The ordering here is6 W3 L( k% r, `! a2 }( t
// significant!
2 l/ W: T- \2 Q( z : C7 X. `5 U; _
// Note also, that with the additional
: l# a( u8 g/ J4 @2 `- }: Y3 v1 z8 b // `randomizeHeatbugUpdateOrder' Boolean flag we can
* w6 h3 v5 N+ `. Q6 i // randomize the order in which the bugs actually run
' V. k7 b4 D/ S // their step rule. This has the effect of removing any
1 E( l) C' G% Y) ^. _5 K2 n // systematic bias in the iteration throught the heatbug# ]/ L! r( e5 h ]/ U( \
// list from timestep to timestep
- G( [3 \' D' M0 U1 Q! ?/ L6 @& b " m7 I2 s2 r( W7 q/ G
// By default, all `createActionForEach' modelActions have
( o$ O# z4 D# j0 N" Z // a default order of `Sequential', which means that the M# Q( m) c, @/ o, {, F7 X1 j% {
// order of iteration through the `heatbugList' will be
- J- E7 y# d8 b/ Q R // identical (assuming the list order is not changed
) W( n# Y8 d2 h$ n3 D( y0 D // indirectly by some other process).$ H h$ o0 d u3 t4 [% ?
( L* p% ]3 S" h modelActions = new ActionGroupImpl (getZone ());: J$ F" b7 F1 B: M% n: W/ G4 S
) F# N2 r& z8 t$ k) q* e! @ try {
0 ?+ n' T: |4 Z modelActions.createActionTo$message. o x; o# p( V
(heat, new Selector (heat.getClass (), "stepRule", false));
. \7 Y5 w- C/ Q" I* ~4 w } catch (Exception e) {& g* c/ p- G: @ J
System.err.println ("Exception stepRule: " + e.getMessage ());
/ ~8 e& v; |& p/ { }& T7 ~. O0 `- d; U
5 g) @& a. u% h8 ?7 w7 |4 B
try {0 t* G2 `: ?: a9 j& x
Heatbug proto = (Heatbug) heatbugList.get (0);' x# L2 M X- Y% `7 t; ~
Selector sel =
3 ^+ E9 X5 n7 J' j6 F0 Q% @ new Selector (proto.getClass (), "heatbugStep", false);) e6 ]! M: P. s
actionForEach =
) H! X+ F( v$ u! z l9 _; A0 i modelActions.createFActionForEachHomogeneous$call& _' I0 u+ ^ e8 {
(heatbugList,
3 l6 b4 G7 v3 a4 V' X% ] new FCallImpl (this, proto, sel,
, y1 E( q/ \5 a" M new FArgumentsImpl (this, sel)));
. ^) J1 J) M! U/ e7 B! x* @ } catch (Exception e) {* O/ T. ?% ]+ ~. W/ J4 \8 O! Z7 a
e.printStackTrace (System.err);
7 z6 \$ K- d8 C0 d- x s }5 `1 Y& ~& Q9 D3 _3 f0 O& _3 @9 x
. }9 y) N( C. a( T1 @ syncUpdateOrder ();
- ?4 L$ r9 s' V$ Y! v
6 i9 X" e2 _, O9 J2 w& O try {
: i$ J6 H# I! z% w+ A modelActions.createActionTo$message 3 y7 F7 c' S5 V
(heat, new Selector (heat.getClass (), "updateLattice", false));) b9 K# i' z; C$ d+ c: L
} catch (Exception e) {
9 e8 c. e* b/ o- o* z7 Z1 n O System.err.println("Exception updateLattice: " + e.getMessage ());
# b" c$ ^! R/ w2 n0 v% O }( ?; Q4 I5 M' N$ x3 p# _2 w3 n
- Q% M; Z0 v. {+ y9 f. \ // Then we create a schedule that executes the' G- u% r7 G. v5 [1 x% P
// modelActions. modelActions is an ActionGroup, by itself it
. g, a9 x) d. t0 d6 U // has no notion of time. In order to have it executed in: T6 k! }, O6 C
// time, we create a Schedule that says to use the
* _' J: p& Q) W7 v O% L, _0 R // modelActions ActionGroup at particular times. This$ s# p; F" A1 A$ y
// schedule has a repeat interval of 1, it will loop every8 S* R/ a3 K; N H
// time step. The action is executed at time 0 relative to7 t$ T2 T1 J4 O* Z; o# l0 i
// the beginning of the loop.. L+ U6 \, y8 j4 g
. [) A) Q( u; o3 W // This is a simple schedule, with only one action that is0 ~6 v6 [; v | j& g
// just repeated every time. See jmousetrap for more
# h; n/ N* f$ W O- B) D // complicated schedules.
$ D3 U$ `# a$ Z 7 V. j- P0 q1 S- K5 o* ^; c$ ^
modelSchedule = new ScheduleImpl (getZone (), 1);
4 f2 B9 G4 ` q: N, A, t modelSchedule.at$createAction (0, modelActions);0 I8 w$ B: z% b8 P
0 B% u. {- L/ y4 T2 {- Q% _
return this;2 q& B* S2 n$ z5 {- T
} |