HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: O3 ^" s( j; J% y
* V! P! }7 d" e# n public Object buildActions () {
* N3 S5 d( V% k) x super.buildActions();
/ f- q5 h1 @( @4 c) b. P, p
4 y( s* t# g' G% |9 I& i // Create the list of simulation actions. We put these in
& p5 |! O, T( y9 B) S: ? // an action group, because we want these actions to be
0 j: D) X$ c; Q; F8 W$ g // executed in a specific order, but these steps should
' T( k% H; Z& e# y+ _+ } // take no (simulated) time. The M(foo) means "The message
/ n! |. ^- ?. Y* U // called <foo>". You can send a message To a particular
1 E( V1 d# k/ k7 n! N. \ // object, or ForEach object in a collection.
6 {: j8 O7 l" r
% ~5 A) B/ J) e, d5 q# n // Note we update the heatspace in two phases: first run
1 Z* e1 c7 F- [6 d // diffusion, then run "updateWorld" to actually enact the
( g3 W' h7 |0 O. y1 R! w) | // changes the heatbugs have made. The ordering here is/ b* q( ]. y" I! e) `7 b! Q
// significant!
. `9 n/ g! Z; U3 e
Y, f: f6 x& |; O- b" F" o // Note also, that with the additional2 ~# Q3 C c! w& g$ ^( \7 t. R7 T
// `randomizeHeatbugUpdateOrder' Boolean flag we can) H v+ s: k3 o i o
// randomize the order in which the bugs actually run
# A& E3 [+ l3 m: `' L" D, L // their step rule. This has the effect of removing any2 O1 m0 C8 t5 u4 U( x
// systematic bias in the iteration throught the heatbug
$ _2 v o; j- R3 R$ _5 C5 U // list from timestep to timestep
6 s; f" E5 S0 i( M
% @4 C+ o; r& d3 Z, o // By default, all `createActionForEach' modelActions have
0 j. F! K$ R9 V2 _1 a( E // a default order of `Sequential', which means that the
+ Z3 K8 N6 H$ E: l // order of iteration through the `heatbugList' will be
% Q R' Q- g# Y // identical (assuming the list order is not changed, N8 F1 q! [3 |' i- T
// indirectly by some other process)." v* ?" f/ `1 h$ G6 ]/ J1 Q3 ^
4 s5 e- G/ J' G1 { modelActions = new ActionGroupImpl (getZone ());6 p) s: y9 b5 Q9 s* _/ a
) z, W" ~+ p( m1 q {
try {
# i) f7 R5 ]2 F6 X modelActions.createActionTo$message
9 P& V9 e' x2 j (heat, new Selector (heat.getClass (), "stepRule", false));/ x$ W2 V0 N/ P/ F$ S2 N
} catch (Exception e) {
: H' I! U1 ]9 }3 j, H1 N+ y System.err.println ("Exception stepRule: " + e.getMessage ());! {/ n, b0 }) u3 ?/ O
}
$ A: J q& K2 E9 B
" s5 o u! P( a try {
$ S% q; W4 q: Y Heatbug proto = (Heatbug) heatbugList.get (0);; _/ [* O5 P% k# z
Selector sel =
7 v4 Z& }* z0 _$ r new Selector (proto.getClass (), "heatbugStep", false);5 h7 a( _( f5 k' _1 ?3 C7 I
actionForEach =- }& s, q+ a" N$ g9 g
modelActions.createFActionForEachHomogeneous$call$ ^. X1 U2 d' o# ?
(heatbugList,( }9 @ H, z0 S) ?
new FCallImpl (this, proto, sel,
1 U2 U0 _1 h- U1 d5 U/ D; Y new FArgumentsImpl (this, sel)));
* Z$ J# h( N1 a2 ?2 }# ?7 x% M } catch (Exception e) {
. \- q* N3 v5 l# `9 k9 O7 L) q e.printStackTrace (System.err);
O# V2 y* Y4 u }
+ I5 @( h6 L3 P$ e* }" g1 I $ ~) f, k1 D' Z
syncUpdateOrder ();5 ?4 V O" ^# G2 v
* A3 [8 Q/ }$ \; t9 V try {0 ?7 y# a# J; M- J0 {
modelActions.createActionTo$message , f M- h- y' Y. a A' e$ w0 O+ m
(heat, new Selector (heat.getClass (), "updateLattice", false));7 B7 B4 W! e, q' H( O5 L: O
} catch (Exception e) {! c# [: |8 C% }
System.err.println("Exception updateLattice: " + e.getMessage ());
) W- S, x( V- k5 X+ `4 o) u }
; m* `% v' \+ S8 c" U* T 3 `9 p1 y, d% n, S5 C- s; N/ d
// Then we create a schedule that executes the2 v$ I$ a$ @; e1 S
// modelActions. modelActions is an ActionGroup, by itself it
, M4 e6 t. F- W // has no notion of time. In order to have it executed in
( _) S' t( r& O$ o5 W- e // time, we create a Schedule that says to use the
$ n% W/ Y$ K1 V* s: P8 U // modelActions ActionGroup at particular times. This
/ o6 R2 r! w; r, ~! D // schedule has a repeat interval of 1, it will loop every
% i: n7 q2 H9 l, K // time step. The action is executed at time 0 relative to( q" Z$ P& V% N" Q0 V
// the beginning of the loop.
) o4 a; M8 {! P3 c# p# B; p* T, w
// This is a simple schedule, with only one action that is
' K3 n- K$ O$ N: i+ Z // just repeated every time. See jmousetrap for more
; x* C$ G* _5 i3 F0 A* M // complicated schedules.: |2 Z/ T9 M5 x8 s; W
+ k4 M r' k. I n0 ` modelSchedule = new ScheduleImpl (getZone (), 1);
3 u' V6 @ _5 z" ]2 ~6 M modelSchedule.at$createAction (0, modelActions); S% X$ k3 _ Y* [
s/ h1 V @' n! @6 Y4 b% K' H7 T
return this;% b& `: y9 W/ `* t! T
} |