HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 v! N* x5 ^6 |" i, d4 L7 H
, X) w* S' b _9 h public Object buildActions () {4 {* u- F3 G& o- }2 d4 E# O* |
super.buildActions();( `+ n+ m, e$ s5 J. E9 r" ]0 {) q
- H( B' m2 [, T8 e0 W3 I
// Create the list of simulation actions. We put these in
, p; Q, m1 i+ ]" }8 Q+ \( b. N // an action group, because we want these actions to be
. @5 i! ^0 [2 z$ t // executed in a specific order, but these steps should2 ?1 t0 y- V& I0 p( Q R' G4 H$ U
// take no (simulated) time. The M(foo) means "The message
# Z. f9 Q4 z& ?1 R/ M" r3 w U // called <foo>". You can send a message To a particular
; v) M( B: X. N& ~7 k( L5 ` // object, or ForEach object in a collection.
* M2 }" z6 z- S, C3 D
6 z9 u- s& U* P" ^5 _ // Note we update the heatspace in two phases: first run5 Q6 q4 L* ~7 _/ U
// diffusion, then run "updateWorld" to actually enact the
2 F! n& P( B0 z, _0 \# X0 ?2 f8 C // changes the heatbugs have made. The ordering here is
) k( h, y$ o, `( n5 Q7 o! s7 m; U // significant!% ]1 z: E N1 m- K5 J% } ?! N
% {) i' M3 j8 w9 [* d // Note also, that with the additional
" V P) ~, @+ C2 f: l7 y0 J% W // `randomizeHeatbugUpdateOrder' Boolean flag we can
, ^# x+ P$ `" E // randomize the order in which the bugs actually run
. { \( T( l v // their step rule. This has the effect of removing any
/ ?% n0 Y4 A' [ // systematic bias in the iteration throught the heatbug
% e! [3 J+ {* o# ?, ` // list from timestep to timestep
; s" j; F6 Q; J) g! K
8 F" @ E) g% E. T2 e3 \+ F9 u/ j // By default, all `createActionForEach' modelActions have% ^9 j1 G p# a: _# E! W* ]
// a default order of `Sequential', which means that the2 f1 T3 L& [! x) b7 v2 Y2 ^
// order of iteration through the `heatbugList' will be6 A* u* C! b, K% d' W9 ^
// identical (assuming the list order is not changed0 _& h$ r1 ~* Z1 Q" l* j5 a [
// indirectly by some other process).
, n! C+ Z% J: K7 \: X% U7 s8 y0 e' c
( r6 W5 e' }/ D; }; u3 h: \ modelActions = new ActionGroupImpl (getZone ());7 W( r4 z& a( ^7 E1 U, M# O
# y% l9 X6 R; ^! @% S# e
try {0 g8 u( \ h( ~3 I( g5 N1 J
modelActions.createActionTo$message
4 {# V7 z' {% I/ Y (heat, new Selector (heat.getClass (), "stepRule", false));
q, A7 ~! t% ]0 I9 I& Y5 Y7 K1 c } catch (Exception e) {
{5 l7 f6 a8 p' Q System.err.println ("Exception stepRule: " + e.getMessage ());
* M) d3 U. x. S: [. Y+ O: S8 d }6 t& H/ U4 C" E4 Z p9 Q0 o
. p, q2 r6 M, R" ?5 I6 ~' z try {# E+ C' i1 r# I. @3 L' V" g8 n
Heatbug proto = (Heatbug) heatbugList.get (0);$ n& _ ?% G5 { }1 ]+ z! t: w
Selector sel = 0 E3 S+ E/ |, X8 x9 @0 z
new Selector (proto.getClass (), "heatbugStep", false);
4 i/ ?# M' |0 c- g actionForEach =
& e4 H2 b% k4 P+ T modelActions.createFActionForEachHomogeneous$call
( E8 g1 `8 D8 C g9 M (heatbugList," ^2 `5 C) [- R
new FCallImpl (this, proto, sel,/ y( h) Y! u6 d7 I T/ m
new FArgumentsImpl (this, sel)));
( x# r& A. F8 w; V8 R* D! W } catch (Exception e) {
% t/ v/ B- v) E5 Y! ` e.printStackTrace (System.err);0 E/ f3 _* d. W8 @/ s
}! G* }, O. x% f. H8 D) |
2 T5 h, N4 _" w, v
syncUpdateOrder ();+ ~- B; Z- ^$ G. p* z2 b) m
' u7 X7 p* K& o& U- O
try {
' |! c* x: A) \! F modelActions.createActionTo$message
5 N; R. ~4 T) E (heat, new Selector (heat.getClass (), "updateLattice", false));
: h6 d, j. z& ?' Y/ _0 f } catch (Exception e) {- [) Z/ v( j! G+ J2 Q% u0 q
System.err.println("Exception updateLattice: " + e.getMessage ());1 O" U7 I7 f3 Y- O0 A
}0 K% w* S" x: s s* ]9 @4 V
4 z, j9 z6 y3 V // Then we create a schedule that executes the
: @) y/ {4 J# `# L! L // modelActions. modelActions is an ActionGroup, by itself it$ z( |- f: @* {5 @& ~. `. \
// has no notion of time. In order to have it executed in% W; N, ^) J& @2 I. ^( _1 z
// time, we create a Schedule that says to use the# {& }- K0 q; @, T
// modelActions ActionGroup at particular times. This
9 }# ]5 ]# ]8 O, @ // schedule has a repeat interval of 1, it will loop every9 R% k3 Z2 M' z, L+ D. V
// time step. The action is executed at time 0 relative to
6 N1 V0 ]) q: R* m# d // the beginning of the loop.: W0 U2 c3 w$ U- N5 A1 X
. ^* }/ H M9 {3 a) ^/ S1 s
// This is a simple schedule, with only one action that is/ }7 o6 _1 g2 \2 W1 `% w0 D1 v/ V
// just repeated every time. See jmousetrap for more
1 C- Q! i. U, V, t // complicated schedules.
" Y! n) q6 _) f6 Q6 ^/ h. \$ S" g 2 s3 {: `( O4 {: Y& c
modelSchedule = new ScheduleImpl (getZone (), 1);' y5 s N1 _) U; M. _
modelSchedule.at$createAction (0, modelActions);) ]. t# M. _7 ^0 ^' t9 M% {
( ]6 O1 d; l7 R+ U" B0 Q
return this;$ c7 R) _$ l( o4 }, U3 z% U8 m. @
} |