HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* r5 U# B! `* b, W" l/ R
# J# n1 X9 R5 j& j public Object buildActions () {
# m; F! x3 q( M4 M super.buildActions();
% L8 `0 z8 O. u# z0 D7 |5 R7 G5 R ! c' ?) n. q1 N& \
// Create the list of simulation actions. We put these in N3 |) f! J( j1 U4 v( m) `
// an action group, because we want these actions to be5 r. {. L0 R6 K# w
// executed in a specific order, but these steps should5 ^ v6 n7 y( l! l' \% a
// take no (simulated) time. The M(foo) means "The message
' z$ x% n/ |# d6 E; E |! o // called <foo>". You can send a message To a particular( }* c3 H* k8 e! R' T' {
// object, or ForEach object in a collection.
) w. p* U* N$ m$ Z9 ]( H9 r # h7 A7 Q: M$ Y2 y7 o- [: J7 t0 K
// Note we update the heatspace in two phases: first run9 [( y+ n, L, G/ y5 A, }
// diffusion, then run "updateWorld" to actually enact the& x! S: n* N$ g+ o, R
// changes the heatbugs have made. The ordering here is
- y5 f- [9 M/ I. R // significant!9 s1 `9 c# @* W, N$ A- b( ]
1 ~, K2 b( r. D# |; i. q
// Note also, that with the additional/ X& e& a8 ]& q) U- b" m
// `randomizeHeatbugUpdateOrder' Boolean flag we can j0 k* R" A& T, y
// randomize the order in which the bugs actually run6 b4 J- g- b# q! M; w
// their step rule. This has the effect of removing any
* }2 K8 q/ c+ E8 }# P$ b // systematic bias in the iteration throught the heatbug Z! r) W# Z* M5 G8 a
// list from timestep to timestep
0 [( g9 Z& |0 o. X( w7 J ( V! [( J% d$ Z9 E2 A
// By default, all `createActionForEach' modelActions have( S8 M& ^. ^( L* r1 ]7 E
// a default order of `Sequential', which means that the/ W3 q7 R6 K% B( o' I
// order of iteration through the `heatbugList' will be9 P1 j. Y% W+ M7 C; I8 v
// identical (assuming the list order is not changed5 R2 B2 x# t5 f* N8 t
// indirectly by some other process).' L5 G# O( u2 e
' ?$ \( m! M O( u' ]2 E
modelActions = new ActionGroupImpl (getZone ());
1 w( U! e8 Z" f7 h8 J+ a! E0 C
" G# h( D' X' n5 {1 X$ ^ try {
2 Q( \, I' }2 N; w" f" u; D5 x6 C modelActions.createActionTo$message
+ x- h+ a8 i& A& N+ D (heat, new Selector (heat.getClass (), "stepRule", false));
4 S0 K% h( Z) s } catch (Exception e) {6 \3 f) l+ G. r: z' ?8 g
System.err.println ("Exception stepRule: " + e.getMessage ());' p$ a. H J5 l7 @
}3 _2 ~ r9 c0 q* h+ l
: m- `2 D; W2 Z/ E
try {* x2 ?8 p; Z s) m* j* K
Heatbug proto = (Heatbug) heatbugList.get (0);
- Q" b% g$ P9 `( \2 ~3 d& B Selector sel =
+ u. B3 D2 @% _/ \ new Selector (proto.getClass (), "heatbugStep", false);2 b z4 _" W) V6 |
actionForEach =
) P" K! E$ B% e) l$ x) z modelActions.createFActionForEachHomogeneous$call
1 f- U5 y( i' c (heatbugList,
0 }0 @: B0 ?: j4 P- l$ j new FCallImpl (this, proto, sel,
9 u0 n+ k+ t- q& H8 [( b$ a; R new FArgumentsImpl (this, sel)));; l9 q2 k1 x3 w6 T
} catch (Exception e) {
+ h) h$ P! e+ X5 B4 v9 Y e.printStackTrace (System.err);
/ \5 k m# |: z# m }* g+ v8 B/ {# F- r
# h# J% c! s8 t% m2 Y- a syncUpdateOrder ();. H' J* h( H& i4 y. o& z# a/ W0 _
: _( ]! ^) M( U- ^: Y try {: A6 k- ~4 f4 I# ~
modelActions.createActionTo$message ( t# X3 N) j; O
(heat, new Selector (heat.getClass (), "updateLattice", false));
: d; Z2 A3 w+ E* d; `9 K; } } catch (Exception e) {$ F1 |3 F; _, T" G
System.err.println("Exception updateLattice: " + e.getMessage ()); g* E0 n8 h1 \ m
}
+ k8 g% s/ g9 ~% |" l . Y0 Z9 v! U' T. b( V& ^% @# k" @
// Then we create a schedule that executes the
1 L! V* n3 A/ W9 O! g0 D! u // modelActions. modelActions is an ActionGroup, by itself it2 G4 |. v3 n" a4 g
// has no notion of time. In order to have it executed in
1 b+ c# ^4 g9 K* L7 W // time, we create a Schedule that says to use the5 b2 x0 j4 b! n( B4 F. n, g
// modelActions ActionGroup at particular times. This
8 f( U# i& J6 }- z: \ // schedule has a repeat interval of 1, it will loop every
# T6 ]) ~( _6 S/ M) w1 Y0 F+ J: T // time step. The action is executed at time 0 relative to- D1 a5 c# k. y4 |
// the beginning of the loop.
3 ]2 M0 m) M6 I) s
* @ R, f h. a% k // This is a simple schedule, with only one action that is
* `% ^% S" g: G& a // just repeated every time. See jmousetrap for more, m4 V) E) ^2 g9 X+ b" C2 N
// complicated schedules.
b( p, U X" O, a5 D1 [% @. P, Z & I# U/ P$ ]. U% B# _# S9 X/ |4 C
modelSchedule = new ScheduleImpl (getZone (), 1);. @. X; x* B% f2 @3 H# o! g! N4 A" s
modelSchedule.at$createAction (0, modelActions);
5 a) p) `& S2 ?0 C- ^ * J9 @2 j' P( q& P( h
return this;
1 V E) D5 k" \; } } |