HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: [' q" K" j& v: k+ `# t+ ]! M7 |
~1 Z* G$ n7 O! W4 ^! f+ S* g M
public Object buildActions () {
! n B) Z+ J% ]/ b% C. r super.buildActions();, l- N2 W1 s4 K
8 |- }+ a% D0 r2 Z/ K* v, A) x // Create the list of simulation actions. We put these in
' \, o/ T7 M, l3 {' j, H3 u6 c: M // an action group, because we want these actions to be
% z- [6 ~) M7 p // executed in a specific order, but these steps should
- c$ p2 P" t3 l9 M+ h, {/ M# Z9 ` // take no (simulated) time. The M(foo) means "The message
g" A& u% y3 g7 r& m3 t // called <foo>". You can send a message To a particular2 n7 n5 q4 C& o' o! J; O
// object, or ForEach object in a collection.
$ T& u" }" s) _ 9 W7 _% y# J: L( J% ]
// Note we update the heatspace in two phases: first run1 ?. e p# ?8 Z/ v
// diffusion, then run "updateWorld" to actually enact the: ]1 i8 Y, P% Q, h6 g
// changes the heatbugs have made. The ordering here is
4 k+ s* U1 z, O ~/ {" K9 Z. Q' f // significant!
0 h; G& Z6 Z8 w7 J) j9 X 8 a4 o; n$ G; V3 T' a+ z
// Note also, that with the additional
; R0 o) I! Z: [, L // `randomizeHeatbugUpdateOrder' Boolean flag we can
( C; ]6 o- B9 ` // randomize the order in which the bugs actually run
' ^$ L9 |" z7 A1 O& h // their step rule. This has the effect of removing any
2 F! {' B, ` B" s // systematic bias in the iteration throught the heatbug0 P6 o1 O4 d! i
// list from timestep to timestep+ @- }2 T: p ^0 H: z! S7 X
1 E& }* t7 q: y% X
// By default, all `createActionForEach' modelActions have2 ]( J1 e4 i- _4 z4 r" q
// a default order of `Sequential', which means that the4 O# J( j& U0 `! M
// order of iteration through the `heatbugList' will be3 |# M! o0 P, \# N, D
// identical (assuming the list order is not changed" z1 G" i4 d) M: h+ k
// indirectly by some other process).
) Z( U( u& ? @9 e * {/ s2 ^" Y- g6 s. m) S& {* j
modelActions = new ActionGroupImpl (getZone ());
8 N" @4 g" J; `( D
; g- L \$ t! F! p" g; z% T6 H try {
3 j0 f( \( a4 d4 l" B7 i; |& p C modelActions.createActionTo$message
/ A( o' | \2 H$ I3 E" c( } (heat, new Selector (heat.getClass (), "stepRule", false));
3 N# M+ b9 F' O0 a4 D/ r& e. w } catch (Exception e) {
+ [# s2 i" y& D, g System.err.println ("Exception stepRule: " + e.getMessage ());- k3 W5 _. @5 y4 I/ @+ j. x
}. h6 p% h& G3 D
& L6 |8 t3 Q; B6 b/ r( f try {# L/ n9 _1 y& s: m! G
Heatbug proto = (Heatbug) heatbugList.get (0);2 v1 D( r# i# [& K8 b3 D
Selector sel = * u1 u+ q, o) n; d& v+ t- Q7 x
new Selector (proto.getClass (), "heatbugStep", false);" Y& Q) a3 s" a1 L; h) U
actionForEach =
+ y6 }; Z4 O, a# ~! |- W' B: u) D modelActions.createFActionForEachHomogeneous$call/ [6 I4 {# R3 _
(heatbugList,
3 }1 D+ w) D* K3 M new FCallImpl (this, proto, sel,4 y! E P- O: G5 E! B7 u) g
new FArgumentsImpl (this, sel)));
! q* H2 z2 |2 k$ Z/ s6 t } catch (Exception e) {
2 h# I$ J( c# t$ K4 a* D# W, V: E e.printStackTrace (System.err);* F8 v: T: {1 y9 D9 V
}+ L( `) `: b2 p# \8 A! k# F4 r) m
" A( N" K2 w$ F% }4 B" T
syncUpdateOrder ();
. E* h$ a, D3 F) Z6 n3 ]( t6 |
) l' Z- G; _7 H4 y try {' g/ c) D5 a8 I# R4 i# K
modelActions.createActionTo$message
- h3 g U8 L, @ (heat, new Selector (heat.getClass (), "updateLattice", false));
6 @" s9 {( U) T) ` } catch (Exception e) {
7 s* v. F( T4 z; i System.err.println("Exception updateLattice: " + e.getMessage ());/ g6 F& U/ A( H* x9 i
}4 K& Y0 H/ ~# s& H
4 I- f! E9 U; T$ l0 A: a% w
// Then we create a schedule that executes the
- S- {5 o N' i0 y" }( N // modelActions. modelActions is an ActionGroup, by itself it- C+ u4 {* S" x9 a8 g
// has no notion of time. In order to have it executed in+ \" y; q" X1 C2 t% h: F$ P# y$ I
// time, we create a Schedule that says to use the
+ O3 r$ x# d {* g o" W' \ // modelActions ActionGroup at particular times. This
) m* e- i/ | `% c9 N // schedule has a repeat interval of 1, it will loop every1 }( |0 Q! i; k1 U% n) R# O# W8 M
// time step. The action is executed at time 0 relative to3 F5 J) i1 j# F+ E' W3 }4 k
// the beginning of the loop.& ?' R9 w/ l& ^1 V9 `/ X( [( P# v! _
; u7 Y, n! `- i2 F7 [ // This is a simple schedule, with only one action that is) d: c6 r' n$ O) ^
// just repeated every time. See jmousetrap for more, k5 \/ b7 h4 t" U3 B
// complicated schedules.& x+ B7 ]* P C$ `/ e4 h2 e
+ o; J9 T" E$ m I
modelSchedule = new ScheduleImpl (getZone (), 1);& f& b: p# q! t. N" Q: t/ r. f
modelSchedule.at$createAction (0, modelActions);: D' N) b H+ H' ]( c) T: o1 V
* B1 @, Q1 {' ]7 n0 E# u
return this;7 U9 E' Z5 ` a# ^5 J
} |