HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 {1 S4 W$ ?/ K3 u0 w1 v7 A& N" s/ @; C% ?
public Object buildActions () {6 K! U$ a3 f7 K4 W
super.buildActions();, t/ k6 g i7 \$ y$ Q
2 _8 {1 H$ y7 f' e* K // Create the list of simulation actions. We put these in1 Y. [( i0 c9 ^. |/ ~# y7 I
// an action group, because we want these actions to be
- M4 g0 n; F9 [6 m0 {3 `3 H // executed in a specific order, but these steps should
4 o& h- [3 E2 {& }# F! e // take no (simulated) time. The M(foo) means "The message5 D# [0 f" c; Y$ P& E% u
// called <foo>". You can send a message To a particular' l& j' [9 @9 j }
// object, or ForEach object in a collection.
0 b+ E# y% V' Y- [( B + _+ E S! ^3 g
// Note we update the heatspace in two phases: first run( W# t1 V0 I: o! r( [# {
// diffusion, then run "updateWorld" to actually enact the# K- R" w5 [- t% Z. D/ p q
// changes the heatbugs have made. The ordering here is
8 \- e! A1 i2 G& a* o' ~5 y* G. @ // significant!
# K+ m% T) D% D, v1 D& d: ~) t
# T9 U5 Z8 p, K, G2 l // Note also, that with the additional
- [8 B# B ]4 S! i0 B1 \5 T // `randomizeHeatbugUpdateOrder' Boolean flag we can% R- B Z' q4 b8 p4 [2 B8 t
// randomize the order in which the bugs actually run0 q* E9 { v1 z" J$ x
// their step rule. This has the effect of removing any
* K: o6 u D0 N v$ f" b6 {* h // systematic bias in the iteration throught the heatbug
2 R2 ]5 g7 L, u% k // list from timestep to timestep; f; O; w" l2 T& }( Y7 e: |
7 u/ e# R7 B4 F$ U7 N9 q' Q // By default, all `createActionForEach' modelActions have
' _& h; }2 Y6 X1 E: h // a default order of `Sequential', which means that the
0 }% T4 K5 @7 H1 C3 N // order of iteration through the `heatbugList' will be' b5 R6 I8 o8 H$ m
// identical (assuming the list order is not changed0 f) ?1 ~ O! S( o
// indirectly by some other process).
/ r# j: N( x6 f# m5 Q$ y) Z% V
% J$ Y' ]. x' l! M+ T( ~ modelActions = new ActionGroupImpl (getZone ());
' ]2 x$ V9 R) z. H9 S, |- c) o5 h1 `" w- a Y+ ?. T U
try {
4 ~4 a7 L- f. s6 q3 G& |- Q3 ~ modelActions.createActionTo$message9 g- q& m3 }) \1 [) t
(heat, new Selector (heat.getClass (), "stepRule", false));
9 D) t h& S9 s9 |0 ^8 m } catch (Exception e) {; z. I! B C# Q: k) j1 T
System.err.println ("Exception stepRule: " + e.getMessage ());
5 K0 o% y8 Y+ B- _. V, H }
; }+ ]: d+ t1 c' b0 w# u# |& ]
" @$ o! G- J! \8 q% o5 f3 _ try {
: h8 @6 I/ m* t1 r& @ Heatbug proto = (Heatbug) heatbugList.get (0);4 m, }) g! X$ I9 ~" i2 }
Selector sel =
! c! \- k- P, Y$ z2 h5 u9 Z new Selector (proto.getClass (), "heatbugStep", false);
. N4 z& c5 s, |# E3 y# e6 b actionForEach =
1 Z' _% t: M+ z% y modelActions.createFActionForEachHomogeneous$call
* A8 o* C& X5 y0 ~( [+ N3 g9 s (heatbugList,& @% e0 f4 N8 {+ f
new FCallImpl (this, proto, sel,
7 ~9 D4 y" c. m5 w8 ?* \ new FArgumentsImpl (this, sel)));, R: X8 D& q2 `6 W
} catch (Exception e) {+ ` |" d2 A5 {5 m) M5 }# |
e.printStackTrace (System.err);
( q3 K+ e2 v8 Y$ m }/ c, }: z! z* A* m
: V3 A* ]* x: i3 b) a syncUpdateOrder ();( h, O3 {5 S: u' N" T- F+ v# {3 P" |
+ k8 o: E# s/ c, ?
try {) d; v7 Q V# v7 @ J" D
modelActions.createActionTo$message 7 |- j" |* m; l
(heat, new Selector (heat.getClass (), "updateLattice", false));
- v" q( O) X3 V } catch (Exception e) {0 F$ W# \: y. J7 W
System.err.println("Exception updateLattice: " + e.getMessage ());6 q* f3 p6 R$ A; A" w
}$ M: n' i/ O. C. j2 o8 O
1 K' o7 b4 y+ u // Then we create a schedule that executes the2 o W) {$ T2 J" p2 }- G
// modelActions. modelActions is an ActionGroup, by itself it
- a/ P% R5 b$ b$ \; b // has no notion of time. In order to have it executed in( H' E# t1 i5 D4 Q, Z: J
// time, we create a Schedule that says to use the
. y1 ]0 h7 ~3 y- e // modelActions ActionGroup at particular times. This* W( r) z- q+ J! s" c! J2 P
// schedule has a repeat interval of 1, it will loop every8 a% | d' d; t: ^1 t' K
// time step. The action is executed at time 0 relative to
}; L2 P8 K& L* v+ }2 l // the beginning of the loop.6 Y% b$ h% C& o: M" i- `- N7 l
! c) i7 ? d7 i; o5 Y( `0 ?4 ]
// This is a simple schedule, with only one action that is. p9 ?2 f) g% q7 b/ \4 N2 p, p4 n
// just repeated every time. See jmousetrap for more
( y; D8 \$ c d2 ]& t$ R6 b // complicated schedules.
) l- y" r' Q! ?! d1 z 9 H5 `$ S3 a" v0 E: @
modelSchedule = new ScheduleImpl (getZone (), 1);
8 A; P: e) N9 J( v modelSchedule.at$createAction (0, modelActions);% ?6 O0 f! f( J
* J1 o5 \( V' |3 H
return this;+ p) {# K: a; x7 H# e0 G
} |