HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 h* E" Y+ y) o7 S. \6 b
! m. ?4 }9 T/ K% Z8 P public Object buildActions () {
! R/ w+ z; x) \$ c) J/ Q Z super.buildActions();3 a. r9 Z, u9 D1 C0 x
' h' \! T' w3 I4 p. }- D5 ?3 u7 z
// Create the list of simulation actions. We put these in
3 j7 B0 M5 n/ |$ q. S) V7 d // an action group, because we want these actions to be2 G- j( F6 I/ S5 Z5 Y- z8 ^
// executed in a specific order, but these steps should/ f; D& X! _/ J8 H$ {! r5 |8 G
// take no (simulated) time. The M(foo) means "The message
# ]* k- a' x! X4 d7 ~" a // called <foo>". You can send a message To a particular
; H: f! G" k: L // object, or ForEach object in a collection.& P3 W4 R/ }/ t; j: L$ _$ N
. C5 l0 q( x5 r4 U r4 V- K // Note we update the heatspace in two phases: first run
1 S8 G4 J7 B& g; T8 i0 K2 x // diffusion, then run "updateWorld" to actually enact the
8 G, a2 f" }3 \ // changes the heatbugs have made. The ordering here is" [4 @" B7 Y J. X8 V) F
// significant!( V) I# ^1 `$ j6 T2 p
" K* v9 B4 N. J' N // Note also, that with the additional
9 V9 C4 C) i( {# ]. `/ w- `* a // `randomizeHeatbugUpdateOrder' Boolean flag we can+ N+ o3 E! p; a- B# M% b
// randomize the order in which the bugs actually run' D( b# T! d7 k( s: P
// their step rule. This has the effect of removing any
: w+ W0 W# v: A8 ^ // systematic bias in the iteration throught the heatbug$ |9 p" n9 L: s# a+ R8 S! y
// list from timestep to timestep
# q7 l; x }: {1 _) {( B B2 y2 {$ a: P& U2 b$ ?2 h: B0 l
// By default, all `createActionForEach' modelActions have
$ u% e2 n5 T/ o( n' e2 u( K6 d3 U6 K' l // a default order of `Sequential', which means that the. a+ Y- d: a1 }% E- J* l, ?
// order of iteration through the `heatbugList' will be
' i i" _3 q4 [3 E# C5 B. ^; u) V // identical (assuming the list order is not changed
5 g$ B% l4 l& k5 J // indirectly by some other process).
2 c3 U2 _; L/ O: b, T
) t: B' _: F9 r3 g9 d modelActions = new ActionGroupImpl (getZone ());: l2 Q1 b" w. B! ^& p
6 ^7 h5 h8 z8 k# }( ]7 U# c% b
try {
5 J9 | X8 \* ~* R, y9 ?3 i$ X modelActions.createActionTo$message* ~. ]9 H1 S l1 Y5 _
(heat, new Selector (heat.getClass (), "stepRule", false));4 s7 p. v m* R; T
} catch (Exception e) {
+ S2 I- S7 h- K- _$ @7 k% f! Y2 G System.err.println ("Exception stepRule: " + e.getMessage ());
: B" S- x6 O! i }
( W- o* _- D! o6 y- M! G* ^& p Y u% h8 X0 f' q6 A2 }
try { ^1 D& ]$ ?% w4 U2 t( d
Heatbug proto = (Heatbug) heatbugList.get (0);+ }* h" b6 f( I2 R4 N2 [
Selector sel = + G0 r7 _, y( g! s" g: }; ^9 L
new Selector (proto.getClass (), "heatbugStep", false);" j0 N5 e' }& q* @7 r) r
actionForEach =" l8 _2 ~. v6 g @* l* L
modelActions.createFActionForEachHomogeneous$call4 e; U. e# w$ h% H3 u9 d
(heatbugList,
: G. k, ?" g; Y) | new FCallImpl (this, proto, sel,# N. C, N: Y' k8 m
new FArgumentsImpl (this, sel)));
& l/ M: }7 ^+ t5 W' _+ ^) D( \$ B } catch (Exception e) {
) p4 o' E. z t& F8 j4 d: j e.printStackTrace (System.err);+ ?# y' Y. g$ t. u. G
}
( P- p" y" I* ] k. [
& Q# y, n& {! _3 ^+ N7 \3 D syncUpdateOrder ();) _% W0 f1 Q( ^* \' U
$ e% }+ a2 I9 `1 _! s: v D* _
try {
& D" c; A% i( h. R modelActions.createActionTo$message : r9 N. @' \% l$ G
(heat, new Selector (heat.getClass (), "updateLattice", false));
( ^8 A1 ~# ^+ f6 t } catch (Exception e) {2 `) \ D2 u: B% V
System.err.println("Exception updateLattice: " + e.getMessage ());+ p' D1 c; Q$ d( B
}3 Y1 W! D4 o# ^
. u( |- h0 r: ~9 b2 b( Y
// Then we create a schedule that executes the
6 t) [( g* h4 P // modelActions. modelActions is an ActionGroup, by itself it
* u0 ?# E9 Q; ?' |' E- }7 L // has no notion of time. In order to have it executed in
" s; f! y0 ~. S // time, we create a Schedule that says to use the3 \; S7 o" u6 I3 S6 ?) Y! }
// modelActions ActionGroup at particular times. This
, i1 ?0 ?- E& B: d X // schedule has a repeat interval of 1, it will loop every
6 T7 p# w2 q% P1 ^. p3 } // time step. The action is executed at time 0 relative to+ Q8 C. a; r5 P
// the beginning of the loop.
! |# f8 \' z J2 l, e7 }0 F$ w4 c8 r! Y- f! L6 H/ z
// This is a simple schedule, with only one action that is
$ a& H: m8 L- r" w+ s // just repeated every time. See jmousetrap for more) ?8 m% N( G2 p7 g" ?( \
// complicated schedules.) d3 i9 h# O7 o
+ V% |3 A4 Z4 @( b1 m& G1 y
modelSchedule = new ScheduleImpl (getZone (), 1);
" P! e7 p7 y& z0 g6 ? modelSchedule.at$createAction (0, modelActions);! g, O* o9 ^9 t% j6 V) \
3 R/ k. H k6 W" `! ^
return this;7 `( }2 L3 A6 _) Q) f' g7 F
} |