HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
n8 H) T1 `0 `( f4 q. V" G8 ~3 R- M) f: [, O1 b
public Object buildActions () {
$ ?' a' V, e: g9 w5 u. S" J( w super.buildActions();
' D3 a, f% x/ d% e+ Y
. x3 t ~6 X H- v6 \ // Create the list of simulation actions. We put these in, I( U1 B6 m& h P7 G
// an action group, because we want these actions to be
* A5 x3 _- H4 c% O4 P+ C // executed in a specific order, but these steps should3 H9 M1 X- z/ ]: V) ~- z+ ~8 \
// take no (simulated) time. The M(foo) means "The message
: k! @8 Q h2 c4 D8 h7 G; u // called <foo>". You can send a message To a particular
8 [) P$ K, F7 {- E4 O* ] // object, or ForEach object in a collection.
: O# H+ |# D# i5 W( p2 ^: q U, w8 Q
' _3 X! s* w8 J) C4 Q' X // Note we update the heatspace in two phases: first run; p7 z' H+ i+ O T( F. k4 |$ g
// diffusion, then run "updateWorld" to actually enact the# O3 }( Q. D7 i0 r, L+ b; t1 j6 w
// changes the heatbugs have made. The ordering here is
) [* c, n {9 J. Y- i5 y // significant!
) p2 Q( o5 H u; P& F + P! b) M+ K/ o+ }0 N# [' t
// Note also, that with the additional
, [6 J- g0 s4 K0 p/ c; W: V // `randomizeHeatbugUpdateOrder' Boolean flag we can" Y& b3 C# A1 m2 D* x" \2 o; w
// randomize the order in which the bugs actually run
p' n, p1 [, B, C' U' m // their step rule. This has the effect of removing any
) L5 p( U8 ? b+ m# U* s6 v- \ // systematic bias in the iteration throught the heatbug& ^: F$ \% C" L4 R: d% L
// list from timestep to timestep. m9 _! [9 o: h& m o
f0 z0 J% K# w2 B // By default, all `createActionForEach' modelActions have$ @- e& s1 T2 f/ T. c
// a default order of `Sequential', which means that the. U! |5 x2 d; s( D6 @. N
// order of iteration through the `heatbugList' will be/ @6 r* m7 ~" U, B3 @
// identical (assuming the list order is not changed3 p# J+ z& q# _+ z" H% }* d
// indirectly by some other process).
: f% `/ Z6 c9 S
4 V% B( x3 ^0 @/ L$ ]$ R/ r modelActions = new ActionGroupImpl (getZone ());
% U) N; c5 O* g9 z. x! z+ }, {& a/ I g
try {. {7 x* Z% u+ y2 w, \
modelActions.createActionTo$message
X+ _( e. b+ a. @% y: l. [. F% ` (heat, new Selector (heat.getClass (), "stepRule", false));( ]4 Z+ J1 C1 V" }3 l: p9 |( `
} catch (Exception e) {
. w) X4 `/ u9 B8 s, h9 |3 ? System.err.println ("Exception stepRule: " + e.getMessage ());) i y3 a& D$ I2 C9 `0 t6 a
}
' S: ?5 X4 P5 k/ ` k9 t8 p+ X1 C
7 L+ W1 g0 ~% q try {
" }; Q+ Z0 V1 i2 I1 `. w, V- n1 r1 M Heatbug proto = (Heatbug) heatbugList.get (0);
. r" k% v$ ^/ D" A Selector sel = ) U6 E$ P/ p7 V2 e N/ ]
new Selector (proto.getClass (), "heatbugStep", false);- Q! o: S! @. v' l
actionForEach =
& U4 @* a4 b1 J) V0 Z% K/ p* g modelActions.createFActionForEachHomogeneous$call8 h4 ^1 V7 `" Y% l( A& \- r! M
(heatbugList,6 X$ }3 D" Y9 c' @0 _; w" E
new FCallImpl (this, proto, sel,6 J& S& A" [- s* B* V1 D
new FArgumentsImpl (this, sel)));
' b+ Q/ n3 b; \ } catch (Exception e) {' W" h v0 C) ^' s0 t, F5 Q* ?
e.printStackTrace (System.err);
; a) N1 U# J/ b* ?& @ }
; Z! p3 n: d$ O& n . Y! d9 W$ d& b: u- r* l7 K
syncUpdateOrder ();3 \5 Z! X; r5 [8 t# O! [
/ ?* T8 m# v3 |" o3 n1 ~+ T
try {% U' ]0 h: U+ o; f& t% s" U/ D+ }
modelActions.createActionTo$message 8 |1 V$ r( i0 K2 ^: Y; S* u+ {
(heat, new Selector (heat.getClass (), "updateLattice", false));1 R8 A% p1 g" A! R
} catch (Exception e) {! o2 b2 a; u8 e" B3 o9 C
System.err.println("Exception updateLattice: " + e.getMessage ());$ Z% Q: T( s' j* |$ ]* k' J6 F
}$ U5 P/ I) N2 b4 [6 w h
( F& X+ g0 |2 B7 \6 Y! C* l7 J // Then we create a schedule that executes the8 G" i+ K* @$ x* S/ w
// modelActions. modelActions is an ActionGroup, by itself it- Y: V; {7 R+ I
// has no notion of time. In order to have it executed in
# @2 H/ D* l. t5 U7 [ M5 f, u! `5 `7 T // time, we create a Schedule that says to use the. d8 k, A8 n# h, S# l6 O
// modelActions ActionGroup at particular times. This
9 |" `" S5 K# Y0 s. x5 {4 h. d5 { // schedule has a repeat interval of 1, it will loop every% ?2 H- q0 ^& p* O
// time step. The action is executed at time 0 relative to
. n/ F& V( L* Z) D/ Z& }6 | // the beginning of the loop.0 }9 E# f! I" S5 X" v/ S9 R' d
2 N' V8 B$ R2 F // This is a simple schedule, with only one action that is
5 `# I1 G: ^* u" H; q // just repeated every time. See jmousetrap for more
* \$ o# S6 i0 [7 F // complicated schedules.
5 t/ w$ u0 H" h, S& T; a$ j
* o4 c& ]( C$ p modelSchedule = new ScheduleImpl (getZone (), 1);; B0 h' s4 e7 Z" _
modelSchedule.at$createAction (0, modelActions);$ Z1 [8 C/ d9 q F
# W, F4 m! U9 y5 S5 R$ Z return this;
$ @( V- Q" x6 a! A( F+ e/ v* v0 h2 B } |