HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; N2 E7 a9 S- Y! B+ l8 g% Z! G+ U; f+ h
public Object buildActions () {
; I/ W5 L5 l9 I2 |; e' g super.buildActions();
4 B# H/ J5 h& U; L0 A
9 [$ t( U$ F- o // Create the list of simulation actions. We put these in
, c6 X, i. C8 R! u# b# f8 d // an action group, because we want these actions to be( i5 h8 h$ z7 \5 M; g
// executed in a specific order, but these steps should& E; u$ m- z7 a: ]
// take no (simulated) time. The M(foo) means "The message% X7 `7 q+ x ]/ d
// called <foo>". You can send a message To a particular7 E! z+ @- p" V5 g7 f8 h* N; `2 _
// object, or ForEach object in a collection.
# H$ f5 o1 i r% u) p
( i2 H+ a0 g1 S: W9 I/ y) a // Note we update the heatspace in two phases: first run
# X0 m2 ? `% E/ y // diffusion, then run "updateWorld" to actually enact the
) b. l9 M9 s9 F2 J9 M; e1 X // changes the heatbugs have made. The ordering here is- G. \" }1 J) S2 s0 [6 D. ?5 E
// significant! g4 x9 B- p2 o6 Q/ }& {
8 y: ~' D$ L! v- t4 p, K // Note also, that with the additional! j! U, @1 }% x
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 m! |; ^; y' ~; R( s2 V2 t
// randomize the order in which the bugs actually run+ G' Q4 Z3 d. h8 p& @0 J
// their step rule. This has the effect of removing any
( c9 S+ \' I# v" _ // systematic bias in the iteration throught the heatbug3 L3 u. v' ]* i2 b# I2 X: j: K3 s
// list from timestep to timestep$ o0 ^& t1 P9 A5 ~" x$ v; m2 Z
) M* o$ n3 b: l4 W- C3 \; Y A
// By default, all `createActionForEach' modelActions have
) s9 v, `: H1 k( X // a default order of `Sequential', which means that the5 s8 X$ X" T9 @) C: @! u1 k# y& B
// order of iteration through the `heatbugList' will be
- j1 {6 A6 V% Y% D' { // identical (assuming the list order is not changed
" Z; ?+ A. s. ^9 u+ I, L8 c4 S8 U" w // indirectly by some other process).( c( W' Z3 Y* B0 X% H
: K/ \4 L9 @( B* ~ modelActions = new ActionGroupImpl (getZone ());% C$ l& L6 f/ S) B4 K
2 C; Z, ^9 _# Y6 Y9 l; [! n try {
$ s; e7 n2 t, j3 P modelActions.createActionTo$message4 A& ^$ h; v7 h$ B3 X h& K
(heat, new Selector (heat.getClass (), "stepRule", false));
7 Y5 \+ ?: @1 @ l- ]: Z } catch (Exception e) {
6 A4 e* `+ X$ Z* t) C System.err.println ("Exception stepRule: " + e.getMessage ());5 i$ i( X, g- u8 [ c8 _) p
}
9 P4 D: S7 S4 D
j# d, X) s0 t5 y4 T% _ try {
! L9 e) G/ a3 U- ? Heatbug proto = (Heatbug) heatbugList.get (0);
9 h) r4 d% h3 w6 b) y5 o) c Selector sel = ! o) a, m9 q9 \% k. Q& O- K* `
new Selector (proto.getClass (), "heatbugStep", false);
6 q/ i. e2 e& G actionForEach =, ~7 I% I+ O* T/ s2 y& o
modelActions.createFActionForEachHomogeneous$call
/ ~# G# f$ v+ m (heatbugList,: V1 R/ h. r) B
new FCallImpl (this, proto, sel,4 c; n; x8 p- P$ H; O* N. q
new FArgumentsImpl (this, sel)));
9 ~% f+ l1 c& c } catch (Exception e) {% f2 G. c) P- X l5 E9 ~7 _3 h
e.printStackTrace (System.err);! \. d, s# {0 @- E
}
1 B. j# `; V% }4 Q* z 3 h: f9 s/ x3 L2 b
syncUpdateOrder ();# Q+ X% u! b0 r+ X" A
( u% {% k2 n& I2 G7 Q try {& H# V. z: z3 y' o7 S
modelActions.createActionTo$message
/ L. b( O$ J" _* e (heat, new Selector (heat.getClass (), "updateLattice", false));
+ s" j4 t4 S: \3 b, R } catch (Exception e) {
6 n; y' v" E7 V6 C System.err.println("Exception updateLattice: " + e.getMessage ());) g; q# z) L5 }9 g' k- g
}, q2 n7 z' s1 Z, ^
- q" p: I' ~1 c# O3 b/ b0 I/ P8 {
// Then we create a schedule that executes the
) g; J$ Y( O: ~, F& Y u7 I/ t // modelActions. modelActions is an ActionGroup, by itself it( p! w/ z: B- u# ]3 k
// has no notion of time. In order to have it executed in
; r. O/ f! o: d2 K& ?" d8 {2 K: @ // time, we create a Schedule that says to use the7 e' P0 t/ [) g! b+ ?! x5 D
// modelActions ActionGroup at particular times. This1 _! @7 ?4 e; C* Q# a
// schedule has a repeat interval of 1, it will loop every
, w* t9 W4 u8 n. w2 x1 G8 E1 [! o // time step. The action is executed at time 0 relative to
3 t b" _ Y/ v3 l; y // the beginning of the loop.5 Y/ E M; e* [& n
+ C( b0 R" v6 b1 `% Y
// This is a simple schedule, with only one action that is
7 ]$ U% i" X+ v; n3 h, }7 \ // just repeated every time. See jmousetrap for more
6 G7 p6 \8 Z" w7 r7 ` // complicated schedules.
6 ^, G0 Q7 l1 {- K0 V' v1 C; E
% l ]- u3 d$ ~$ i modelSchedule = new ScheduleImpl (getZone (), 1);1 x8 j% n1 H. O# ` |: }
modelSchedule.at$createAction (0, modelActions);
3 T( v. o' ^2 ]: B
4 t e I# }8 j9 _1 R6 b return this;. u9 C7 [# ]; h H1 g" a
} |