HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 q; i4 m& E7 ^
1 ?" Z: V6 [4 c9 T: c public Object buildActions () {
! V8 c+ J6 G# s$ w' W# L3 Y super.buildActions();
2 g5 F5 K. Z: c' L' o/ a& d8 h6 A 9 ^ f8 T6 S$ V8 m. d+ b! a
// Create the list of simulation actions. We put these in
- ~" d; o: E1 T8 W1 b // an action group, because we want these actions to be7 A6 {! c1 ^( y: |+ O; M& L# J' j
// executed in a specific order, but these steps should% C/ H! j. J p3 G3 l( k3 Z
// take no (simulated) time. The M(foo) means "The message
) i; n7 Z$ L, _ // called <foo>". You can send a message To a particular
; ^& V9 A, `/ A+ }6 c* y% r // object, or ForEach object in a collection.2 C. [. b. r& @1 S0 \5 A9 k0 H# _' d
! |$ T6 S a* t: v) d
// Note we update the heatspace in two phases: first run: \6 x7 v- u: `, v6 h, J! N) v
// diffusion, then run "updateWorld" to actually enact the
1 r7 J7 R5 W5 G4 Z // changes the heatbugs have made. The ordering here is v) ^" x3 n. A' p
// significant!0 f, c$ U! w5 V: F. T% r; O
4 i& ^" y) {1 {6 z# [% _( Q2 X
// Note also, that with the additional
5 S2 m( _4 I v" o! T9 s // `randomizeHeatbugUpdateOrder' Boolean flag we can
) `7 b! x2 e8 u u4 y1 C // randomize the order in which the bugs actually run4 \/ i: G: d u0 C- u; d
// their step rule. This has the effect of removing any4 [) \0 j7 H+ k0 F' V. P1 n
// systematic bias in the iteration throught the heatbug
7 d/ [& \4 V* j6 U // list from timestep to timestep
8 u$ b% x. F8 H 8 _& a, c6 R" J: c# a
// By default, all `createActionForEach' modelActions have8 b! q I- S- H! M5 o& ?
// a default order of `Sequential', which means that the
5 u- Z! ~: a! a0 H9 B" K // order of iteration through the `heatbugList' will be
; J, n' R' `; `6 D# [9 j9 M // identical (assuming the list order is not changed4 X) H8 P4 x: h$ {! W- @2 O8 m$ Y
// indirectly by some other process).* x& |( i5 j6 V6 G. V) ?
8 ]1 _0 }! e/ R; C0 w" t. J* _3 [5 \
modelActions = new ActionGroupImpl (getZone ());5 y$ e4 N7 r7 E7 ?: R' q8 W
0 L# {. N1 F r" c* v/ V try {/ n( ?6 o$ X- J% X& B
modelActions.createActionTo$message
8 C( w6 d5 q5 t+ R7 `0 c2 e (heat, new Selector (heat.getClass (), "stepRule", false));- Y: _1 k" |- b* Q2 X
} catch (Exception e) {
6 Q4 B1 z, V g3 r* N* {1 b! N. g System.err.println ("Exception stepRule: " + e.getMessage ());; k* X# R' N$ s2 L9 M3 h
}- {0 V F. S* u. d/ o$ J8 ]' V
" m% R0 h; p; I8 g
try {
% K, y+ w6 P" w# H; Q) D- [ Heatbug proto = (Heatbug) heatbugList.get (0);8 I2 J3 F& p0 F7 K3 u
Selector sel = . } }8 ?. f0 u) V
new Selector (proto.getClass (), "heatbugStep", false);" J2 k6 l! P& O2 I# |6 z$ I
actionForEach =
, ^8 C1 M& e6 B. Y modelActions.createFActionForEachHomogeneous$call$ n; z- B' ^* G- }
(heatbugList,7 I6 h4 s3 d, }( ~! A
new FCallImpl (this, proto, sel,
% ^* k8 v& l; G" `! ^ new FArgumentsImpl (this, sel)));* b# Q7 X" O* p1 }" o/ E' f
} catch (Exception e) {
% u2 _6 S8 F- P& H' \; m+ n e.printStackTrace (System.err);" L+ \5 T+ D7 d2 q& \/ R4 z+ T8 k
}; n, w! A3 x% q$ T2 {% w
! U7 m; w. L! M
syncUpdateOrder ();
& ?, n' ~7 \" a5 f) ?5 P
* R% U% \) U. H6 V: `" ` try {2 f0 W# o' |* { W7 ?: K* y
modelActions.createActionTo$message # u. e% i( \2 k |) q! u/ L2 Y
(heat, new Selector (heat.getClass (), "updateLattice", false));. ^9 U7 T5 Q, {& y- Z, G. R( F% J1 w' F
} catch (Exception e) {
' U0 _) q1 K' F+ g System.err.println("Exception updateLattice: " + e.getMessage ());- X8 h% [+ C+ M. o/ p7 F
}! X" ]7 T% U3 _, }
' C. O7 Q3 r4 k$ g5 S9 k+ k+ i& T, X
// Then we create a schedule that executes the
8 d5 K) b( J& @# }% s* V2 j, r // modelActions. modelActions is an ActionGroup, by itself it
! v+ [% ?4 s" _" c1 q E9 R( R // has no notion of time. In order to have it executed in
8 I0 @* l! F) X' W+ a# J9 B' |) S$ I; ~ // time, we create a Schedule that says to use the
n# \. N" D9 E8 {5 t' i // modelActions ActionGroup at particular times. This |! a& B) a8 m5 h
// schedule has a repeat interval of 1, it will loop every$ C% u6 Z/ ?/ R
// time step. The action is executed at time 0 relative to
) c8 s1 N( M& B& N, s2 u // the beginning of the loop.
' ?: C+ }) ?7 `4 G: k, m
# S. i& E- X, Z! Z6 r // This is a simple schedule, with only one action that is4 ?2 _! d w8 ]: v* M
// just repeated every time. See jmousetrap for more# d0 X: K k$ l) G
// complicated schedules.- i% E0 p5 }- x! y1 } C8 ^, N4 R8 f! B# i
1 M% R# G% z0 @8 t$ K modelSchedule = new ScheduleImpl (getZone (), 1);
2 k. t) W) z W% `$ d7 B modelSchedule.at$createAction (0, modelActions);
7 W& |" f2 Q; `8 _9 w; m " z9 c; f7 V( ^4 o
return this;3 B. }2 M* \. _; Q$ G4 C
} |