HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 T3 s# t9 ~! k9 S( H- E7 ?# E
4 h% c9 ?; ~3 Q' L9 D public Object buildActions () {) z) f; k- N' C! g" g# }
super.buildActions();6 q# O8 u& v, ?6 ?- O6 G% o; E
9 C7 d( W# B. O% P% v
// Create the list of simulation actions. We put these in# g2 }4 `. X" ^4 q$ A, Y& g9 C7 F
// an action group, because we want these actions to be
4 \! C+ R- d) s# d) \& x% O // executed in a specific order, but these steps should
+ R" D- @/ F4 n# P // take no (simulated) time. The M(foo) means "The message- E% e, }: H6 x0 J! s& k3 H
// called <foo>". You can send a message To a particular
' h5 Y2 e F2 Q2 I* Y& v T3 A& L r // object, or ForEach object in a collection.! O, a# M' f8 i5 p7 s. i5 a# o. u
9 H! Z2 \8 \' S3 x
// Note we update the heatspace in two phases: first run
' [6 m3 P9 b6 K1 R" N4 a' K // diffusion, then run "updateWorld" to actually enact the
- g: \6 m" |# F" b5 S: l- J8 t7 n // changes the heatbugs have made. The ordering here is ~ _% [! Z6 l. ^6 r
// significant!
/ c% X3 p+ Q8 Q( V, E# L* R- @
3 x0 d+ A$ u; d! X+ i // Note also, that with the additional
* O U- Q* k! D // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ U0 F, Y4 P+ a/ e# O" K) I- R: g // randomize the order in which the bugs actually run
9 S Y% ], |: _% G# x1 ] // their step rule. This has the effect of removing any
K; ~' }- ?) c o3 a, n, A // systematic bias in the iteration throught the heatbug
- T# J; T6 h/ Q# @, y# Z1 c // list from timestep to timestep! F8 |6 O& J' c# ~" o" e, u
; ^$ J. C5 G4 {, D // By default, all `createActionForEach' modelActions have* w9 I5 b( S& w- o+ n
// a default order of `Sequential', which means that the% {& s! ~4 B1 g9 M! i, G9 f
// order of iteration through the `heatbugList' will be" d( u9 H7 R x/ c; }
// identical (assuming the list order is not changed
( l6 k9 K# v$ b) P8 S, G // indirectly by some other process).2 k; z ?$ M4 W% |
- H. f' D6 }7 U! i8 }4 ]" m
modelActions = new ActionGroupImpl (getZone ());1 y5 ?5 e6 x; o3 s
; ^% D" L& `. Y7 q' W
try {
1 r8 @ ~- `& u* A9 e modelActions.createActionTo$message0 x1 w8 g, c/ a
(heat, new Selector (heat.getClass (), "stepRule", false));
/ Y a& z A$ C4 Q } catch (Exception e) {
+ P5 ]1 d/ m c& @ System.err.println ("Exception stepRule: " + e.getMessage ());
7 W( m5 `8 [* h' Z9 a }
+ H, N" |) Z& J# x9 f: O" L S0 b! q3 O
try {
& |3 d# q8 W# l Heatbug proto = (Heatbug) heatbugList.get (0);2 @* F& J) i. L
Selector sel = - p! p# N1 \; i: E
new Selector (proto.getClass (), "heatbugStep", false);
( U, n% ^6 o9 A2 `0 E actionForEach =
' s) C, Z4 D2 i6 j C modelActions.createFActionForEachHomogeneous$call' P' t5 Q8 W, t
(heatbugList,) z6 Q, _6 _4 U# Z5 q9 h
new FCallImpl (this, proto, sel,3 q! F: R, I. V0 m# _- I g$ v# d! P
new FArgumentsImpl (this, sel)));
( g7 ~( }" P# k } catch (Exception e) {
$ u8 r) M' W8 q+ O& g! G e.printStackTrace (System.err);1 I/ v E; D i. K8 e5 r
}
8 |, i3 H0 I6 b. j
0 R! t/ i: L, d0 ^& V syncUpdateOrder ();! T/ B& ~, H+ k( C s& g8 D
* l% Q# J4 k) \/ D" K. K7 o/ `4 C try {3 K4 _4 C! c& Z
modelActions.createActionTo$message 9 X: L4 _: a" i$ i4 N* n
(heat, new Selector (heat.getClass (), "updateLattice", false));( v$ C3 c, k& \! }
} catch (Exception e) {$ O. g$ E0 G$ {! a, ^- c4 H' g
System.err.println("Exception updateLattice: " + e.getMessage ());4 W, Q w8 T6 j& e" A
}1 l1 q* o3 q; i+ ^
% c8 X2 Q& J. W7 f" x# f
// Then we create a schedule that executes the# x- }& _6 Q1 x0 m
// modelActions. modelActions is an ActionGroup, by itself it. X* D7 O7 U5 ?" r/ h6 G7 ?+ w
// has no notion of time. In order to have it executed in2 L6 C+ ]9 Z$ V- ?6 Q% ~
// time, we create a Schedule that says to use the; T& p0 ^- D9 K
// modelActions ActionGroup at particular times. This
3 {- B# c) ~4 v& q // schedule has a repeat interval of 1, it will loop every
}5 \/ ~- v" f) R: T( s8 V // time step. The action is executed at time 0 relative to! G4 b- c; |( Q3 c% _0 F
// the beginning of the loop.# y* P i- ]" N, |7 w7 K
7 @/ f- Z. z& z/ Q% u5 J5 `% w // This is a simple schedule, with only one action that is
1 C! y- A- v4 n; g" R$ E // just repeated every time. See jmousetrap for more7 ]: H: S4 _) d( w2 i! B8 H
// complicated schedules., q! G4 P* {5 f
( z' E; z1 L& p* F* F modelSchedule = new ScheduleImpl (getZone (), 1);
' N6 c$ f: L: x! B, K9 X5 _7 f modelSchedule.at$createAction (0, modelActions);) O' K" z4 V4 ^! [) _% H
- ^7 ?6 M# }0 V' }3 { return this;
, I9 p3 }/ K% S3 o# @ } |