HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- o9 _. i+ V6 }$ s
+ [. E ^$ x5 Z, s& s: }6 W
public Object buildActions () {' U( C& t4 `) P5 I/ f
super.buildActions();# E+ f2 J$ T3 i, S m M0 F9 y8 Q
% T8 r; i8 r1 P0 q! E2 o
// Create the list of simulation actions. We put these in) U. c! D- b+ t4 L
// an action group, because we want these actions to be& b' c' U) e# [3 d' e
// executed in a specific order, but these steps should
5 J1 V5 \: i/ c3 E9 y // take no (simulated) time. The M(foo) means "The message7 ~* ~4 _0 Z v8 r9 C- m
// called <foo>". You can send a message To a particular
0 V' I) P$ Z. z* q // object, or ForEach object in a collection.
$ ?: C1 r# H) p % J8 u& Q( L. h
// Note we update the heatspace in two phases: first run
$ q+ d7 m* j" V // diffusion, then run "updateWorld" to actually enact the
2 |+ Q- v2 l" R* u7 N // changes the heatbugs have made. The ordering here is. C d o6 ~1 c, J1 P
// significant!
; k' ]* q; P$ H9 Y9 T
2 y6 B. y5 u# A6 [ // Note also, that with the additional
0 ?- _+ x) @* t: d$ s // `randomizeHeatbugUpdateOrder' Boolean flag we can1 N$ }) i& Z8 U0 }' o" C u
// randomize the order in which the bugs actually run# S1 t4 N- P% y9 F4 D
// their step rule. This has the effect of removing any) c+ c% P! z& C5 @) q' G9 S' J
// systematic bias in the iteration throught the heatbug- g% W6 s2 C2 B8 k9 A; Y5 _
// list from timestep to timestep1 n& U. ]) F# h
j/ y/ v& O, K( w3 F7 D // By default, all `createActionForEach' modelActions have/ Z; {0 y/ M9 P" c2 \' E& A
// a default order of `Sequential', which means that the
; y( x' {8 P( \% k$ J$ p // order of iteration through the `heatbugList' will be
$ O/ ?6 q; I6 E h8 e0 o4 a# \: ?6 D // identical (assuming the list order is not changed
3 X7 [+ r1 x8 K* `9 J // indirectly by some other process).7 q6 Y0 t# g' S/ O) n! h0 k
& R) c. I! F& _5 W% f3 y
modelActions = new ActionGroupImpl (getZone ());
. ]) I0 D; q* Y" \6 g1 @0 H8 R5 h# U! ~
try {
q$ `% m" M( |# G0 |: u- a. n( j modelActions.createActionTo$message
" k2 {6 t9 ?- l# O% t; A( D (heat, new Selector (heat.getClass (), "stepRule", false));5 q6 u5 \3 F+ } N' T8 |+ u
} catch (Exception e) {/ E1 ]4 R: _# W5 a0 Y3 O6 K( H( W" h
System.err.println ("Exception stepRule: " + e.getMessage ());& b* h9 G! I! n! c7 J: P" ]
}
+ I# a7 i) }. ?4 L
1 c. r( z8 D$ s try {1 M' i p2 O( \- ?
Heatbug proto = (Heatbug) heatbugList.get (0);
3 k- x5 Y8 h/ X" M {+ }: L Selector sel = ' Y' L3 |# D0 y/ O5 d4 w
new Selector (proto.getClass (), "heatbugStep", false);5 B3 X u( k4 i( H1 o2 n, z
actionForEach =4 n: W5 M: j# J7 @
modelActions.createFActionForEachHomogeneous$call
8 P. E" [+ A& U% G (heatbugList,
' K& [4 Y4 I% c; X& V P new FCallImpl (this, proto, sel,- b3 m9 L" U. E1 d
new FArgumentsImpl (this, sel)));
$ p' t, ]# y7 E } catch (Exception e) {3 O9 B& W) l8 v# _+ b% O4 B/ N( h
e.printStackTrace (System.err);
( a5 X9 [; b9 [3 J }, Y3 J: q: @3 h& u7 s6 m
s; [' b) E) k0 q8 u# U! y# j# X$ b syncUpdateOrder ();
% ?, I+ e5 x# N; R; v
$ {" u. a e2 {- u* O( O try {
$ x5 V& ^- d2 j* c- n modelActions.createActionTo$message + Y0 x: L9 B( g
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 ? c# v: x; |/ c: u0 ^ } catch (Exception e) {
" F6 C3 @+ O3 o* {: q2 i R% b System.err.println("Exception updateLattice: " + e.getMessage ());' o$ G$ Y# t0 ]
}' X5 C# p: [8 w4 x8 ?
: A" J+ p3 J* P# `: B: D
// Then we create a schedule that executes the9 P5 o& |! R% D8 X
// modelActions. modelActions is an ActionGroup, by itself it
0 V5 h2 k5 J6 S$ j- Y7 c' A // has no notion of time. In order to have it executed in
' X8 d$ `" h1 S) t // time, we create a Schedule that says to use the
' a. M6 B O; e! I // modelActions ActionGroup at particular times. This( P: r% O3 B( |+ W$ N
// schedule has a repeat interval of 1, it will loop every
* E1 E, }5 E4 E // time step. The action is executed at time 0 relative to% N6 w1 I7 U$ F- \3 M* c3 Y4 R
// the beginning of the loop.$ x; L" m* W/ @4 J" G1 p
2 O& K5 `7 v$ y% o" U' M; Q, W
// This is a simple schedule, with only one action that is
' ^) `* ]$ c' Z% C# @8 j // just repeated every time. See jmousetrap for more
, a* ?/ H4 ~. b2 p! o! l5 s; e. c // complicated schedules.$ F3 ~' i3 Q5 O
* {8 |0 i* u" ?) f. u; }
modelSchedule = new ScheduleImpl (getZone (), 1);
0 Y6 m9 v! U% L# ^ modelSchedule.at$createAction (0, modelActions);
8 M, S1 q) T3 s: g ' J; x9 u2 e5 s4 u0 Q
return this;
' ?" X7 K, t, c6 j( Z } |