HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% h" J+ h2 M, Y
3 B1 J" T" q( e9 S) L. i# ~
public Object buildActions () {; i5 [/ n* ]3 s& `
super.buildActions();0 U: G: N5 Z' ? o) J
' b( N u% s/ Z' j // Create the list of simulation actions. We put these in
) ~) w) Q' I$ _( r // an action group, because we want these actions to be
- b8 z$ _' y7 S7 e1 j // executed in a specific order, but these steps should+ A2 F0 C1 c* W/ p) S
// take no (simulated) time. The M(foo) means "The message
' _* \& e% d) q& I0 R1 F7 d/ {4 l // called <foo>". You can send a message To a particular" U5 b( y& l Q5 [8 D+ T
// object, or ForEach object in a collection.
. M0 |/ B [) l7 b7 Y( _7 \ ; j/ D! C. E4 W% r
// Note we update the heatspace in two phases: first run0 T! S/ G7 J' }, h# Z7 p" m2 u
// diffusion, then run "updateWorld" to actually enact the1 i. e: T2 s' I9 T. D- n
// changes the heatbugs have made. The ordering here is
6 }0 @7 k B M // significant!6 W& C: ^4 K/ w+ X3 \. }* h6 [
5 N8 C1 k- m( ]$ I3 T @2 t! I // Note also, that with the additional
. ~& B4 N7 u2 f7 F" I+ Y // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ [ S: M; j5 n2 ?# x // randomize the order in which the bugs actually run
% S5 _4 e; d4 U5 \. W! n // their step rule. This has the effect of removing any
w) \, n! E2 t( V2 c) _ // systematic bias in the iteration throught the heatbug* U$ A9 t" N! H6 ?; D
// list from timestep to timestep! e/ K9 A6 {5 T: |0 c) y/ T
+ }/ b9 ]) v' w: F0 K3 O- u* f! k
// By default, all `createActionForEach' modelActions have. |( n3 ~9 j8 q8 Y
// a default order of `Sequential', which means that the0 y4 F c3 N h- y
// order of iteration through the `heatbugList' will be
. h4 H: l1 Y' E0 p+ V# U5 [ // identical (assuming the list order is not changed. t6 j: q4 R" z
// indirectly by some other process).
% m( x' d, i) L1 s7 r; } 1 R5 u: p! I) q+ @
modelActions = new ActionGroupImpl (getZone ());
: Z9 I( w4 [9 l/ B
- y) y! F7 M3 B try {
! c, C7 @ a' T1 b2 j% M: Y modelActions.createActionTo$message
6 Q& O, M0 o- {& f# e5 g; ^! b (heat, new Selector (heat.getClass (), "stepRule", false));1 l: V/ V4 c# x# O# l, u9 }0 q
} catch (Exception e) {
5 }( n- B% j8 Z- E$ [. j System.err.println ("Exception stepRule: " + e.getMessage ());
# O6 r5 _9 d+ h' o+ e2 S }
- P' z, g3 m) _/ I. w$ T8 m# e! n3 l; g! H# m
try {
. v' t7 u6 ]! I: g- ?2 W Heatbug proto = (Heatbug) heatbugList.get (0);5 I; x% ^2 W: S
Selector sel = $ G0 C6 J* R& p4 u
new Selector (proto.getClass (), "heatbugStep", false);" N3 l7 ~" ` f3 t+ }, }2 I* k
actionForEach =
, ]( b/ [( G* b+ S# [ modelActions.createFActionForEachHomogeneous$call
* I8 Q/ e) G/ Q6 j2 T6 x l (heatbugList,% u' g, D+ }6 _$ p% C
new FCallImpl (this, proto, sel,
! f# e+ M" I4 r+ [9 C new FArgumentsImpl (this, sel))); q( v. L/ y7 W- {/ _' A5 S4 t \+ Q: ?
} catch (Exception e) {
- D' g9 c3 [) e2 T+ K0 l e.printStackTrace (System.err);
' L7 e1 }7 L/ P9 V# ~/ O) A$ W2 f- B5 B }
+ U; W) x, a4 G 8 }) x7 a% \! Z$ T* ^3 j8 K9 V
syncUpdateOrder ();2 m1 e) g) I8 A* ~; D1 ~/ e
: D4 a7 S% G' P$ n7 |) { try {" M' e5 s, [" v2 i
modelActions.createActionTo$message
* Z3 N0 Q+ W1 Q ~+ m (heat, new Selector (heat.getClass (), "updateLattice", false));( R4 o( T# Y, U. n" P
} catch (Exception e) {2 c/ q" {9 m0 q- s
System.err.println("Exception updateLattice: " + e.getMessage ());5 f( q E7 E( v }% K ]
}
, Y" O0 a1 j$ C8 L0 ?1 \1 | I + f" E9 O& [2 T# F* o
// Then we create a schedule that executes the
, ~" z+ U! L2 N1 E // modelActions. modelActions is an ActionGroup, by itself it M- y6 o2 _) e7 X& U0 Z
// has no notion of time. In order to have it executed in
; s# d- t, F* j# w; l // time, we create a Schedule that says to use the( m9 S& o# J) b& f* ~6 S
// modelActions ActionGroup at particular times. This# ] ~2 A! Q" l9 x; ~7 q. l
// schedule has a repeat interval of 1, it will loop every. o/ U* X" Q- L% ~; D$ j
// time step. The action is executed at time 0 relative to0 ?& a x$ s2 G. C; [
// the beginning of the loop.
% u0 Q( w& _! i- g9 j1 ~# j4 N0 u* z; `1 J0 D' u
// This is a simple schedule, with only one action that is
t. S+ l+ C. s4 V# S, p$ S // just repeated every time. See jmousetrap for more9 z6 \& z, `' C4 Z# P( Z
// complicated schedules.
4 u9 K; X$ ~0 J4 j% w" T0 Y
2 a* S0 z. u$ F; p modelSchedule = new ScheduleImpl (getZone (), 1);- e, Z, s2 |+ ^; r. N& Q
modelSchedule.at$createAction (0, modelActions);% Z9 Z h2 ?4 h, F7 n
u) F- }4 _; q# ~1 E return this;
% E ]& c& M) A. y } |