HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ p& {7 ]/ C7 w" T. x5 f' b
$ G2 H1 d/ U# G* D$ s" I public Object buildActions () {
G% E. b3 \* I1 C4 W7 ?* k6 J super.buildActions();. W) Y j) \) _- e) D9 L4 i
; ^5 Z! i, r u8 p* z8 |$ T // Create the list of simulation actions. We put these in" d" O# f, r+ h4 i& `; K
// an action group, because we want these actions to be
0 Z( \8 k0 E4 v // executed in a specific order, but these steps should9 u4 n# [) @; T3 U
// take no (simulated) time. The M(foo) means "The message! W Z1 Z( z8 R& U# J
// called <foo>". You can send a message To a particular2 `- l# W- H" d8 C% J" }" H0 _
// object, or ForEach object in a collection.
$ J$ ?/ Y3 E* x: e' Z : F+ m$ _& Z! ^" H8 j
// Note we update the heatspace in two phases: first run
+ o1 B8 s9 g, \: ]; e2 P. B8 _ // diffusion, then run "updateWorld" to actually enact the% u+ _. P! M. _6 p6 p# |+ z
// changes the heatbugs have made. The ordering here is
7 o7 n+ q$ `, U( G // significant!6 L6 i2 }& j! W% y
. Y, B- W* d& C# n9 D' \- s) X- [
// Note also, that with the additional
5 s% z! h0 Z- b; W // `randomizeHeatbugUpdateOrder' Boolean flag we can2 }) p9 I, ?+ O* v! e
// randomize the order in which the bugs actually run7 N1 v0 x! M5 W( d8 ^
// their step rule. This has the effect of removing any
' e; @4 o4 {; z. m; o6 \ E // systematic bias in the iteration throught the heatbug
1 |/ ?4 T% y9 P5 A // list from timestep to timestep$ K: K+ V4 A4 [ `/ F
2 I, Y- c3 B) x
// By default, all `createActionForEach' modelActions have# n N1 J$ X; L% _" O
// a default order of `Sequential', which means that the% Z- i2 ~5 L2 o
// order of iteration through the `heatbugList' will be4 I7 f) [4 B# k; n
// identical (assuming the list order is not changed
! Z* s5 Z4 ~3 N5 P // indirectly by some other process).; C2 p2 L& Q' ^+ a5 I3 m
" N5 N- I% D3 D U# O% \
modelActions = new ActionGroupImpl (getZone ()); V" M" f" d2 a: `& `) G
; y) m3 e0 ?0 u" _/ e! l try {
7 K, u; s& I. D2 X% ^- T* _6 G modelActions.createActionTo$message* ?( R; x* r5 i5 c
(heat, new Selector (heat.getClass (), "stepRule", false));( }2 W# v2 C/ H+ t8 s* |1 ^
} catch (Exception e) {
! t: S: e0 A: |' F3 _! F' p System.err.println ("Exception stepRule: " + e.getMessage ());7 Z2 X& o- Y3 m; k4 _
}
: _2 {/ H) F' ~. U8 ^- ~
. Z7 s/ ^0 a' B4 H1 {$ i try {
' O' G5 f$ d5 k8 h5 M3 Z" { Heatbug proto = (Heatbug) heatbugList.get (0);8 k) t+ r+ R+ ^& L
Selector sel =
* T6 W5 O4 e! {+ v new Selector (proto.getClass (), "heatbugStep", false);; c3 h, N4 d1 ?8 {# S
actionForEach =
% s x4 n. C: x. S modelActions.createFActionForEachHomogeneous$call( I" _; s. v3 M3 I: h: R
(heatbugList,( d, x3 P, C& g' W: T1 E
new FCallImpl (this, proto, sel,
, p4 ~; j; q* H& ~$ J% i new FArgumentsImpl (this, sel)));) c+ c* v- w9 _+ z2 O& M4 H6 \. R
} catch (Exception e) {
5 j4 x1 X5 Q. \. Z% ^. v e.printStackTrace (System.err);
: q3 n5 x2 F8 k5 t; d; y/ P+ t }
% l' s0 ~' q" Q5 v. s1 o; U : T9 B- T I0 R" g1 B2 _( Z4 s/ T
syncUpdateOrder ();
9 O( R. j* B x& `( r' O* m7 p0 J
# D/ V% o4 v5 B6 K try {
+ [/ f- w: r U: C) D; w1 W modelActions.createActionTo$message
& u1 w1 E. ?) p" F% Z (heat, new Selector (heat.getClass (), "updateLattice", false));
( ^# Y8 n- b5 Y( j5 ^- M' s1 _ } catch (Exception e) {0 H# H/ N6 }) ~3 i
System.err.println("Exception updateLattice: " + e.getMessage ());
6 x2 m; H) S8 Y }, g9 Y1 v/ E3 ?3 |0 I
- M! w b+ A0 k& W2 e; K+ X6 d // Then we create a schedule that executes the
# i- f4 t, [6 u$ B* ?) g& a // modelActions. modelActions is an ActionGroup, by itself it
* s8 L3 r4 `- b5 _ // has no notion of time. In order to have it executed in
6 i' u# f% U1 o2 V // time, we create a Schedule that says to use the
9 F W$ i& W' c# g" D `4 q: k // modelActions ActionGroup at particular times. This
, g2 d6 `; M7 y& [& @' A& U // schedule has a repeat interval of 1, it will loop every! x d* R5 i* L |. S6 Q: l' G$ }
// time step. The action is executed at time 0 relative to3 ~% |. ?3 _( ]# N
// the beginning of the loop.% M! s$ E+ b- R2 N8 j
) B* n2 b9 r: d5 y7 w
// This is a simple schedule, with only one action that is8 J/ S1 w6 Q$ s) W8 m" d4 U5 I# f( Y
// just repeated every time. See jmousetrap for more t0 ?. \4 w% U2 h, v/ z( j
// complicated schedules.
# k( c4 T1 S+ l, }- d4 }3 Y ( ~( o) m# Y6 K4 G) S
modelSchedule = new ScheduleImpl (getZone (), 1);6 y+ Y- Q. E% W
modelSchedule.at$createAction (0, modelActions);, _4 I7 u' F- M9 a. a/ X' P, S
2 b0 H4 L, W+ i6 O& h/ Y" |; C
return this;+ ?5 r7 t% D) J
} |