HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 M3 c# o9 P' A5 [& ~" j: ~0 I" S ~7 B
' [) }4 q3 h% H. @
public Object buildActions () {
8 R+ C' M" ^/ O3 {4 u; }2 y super.buildActions();/ b) U# Y) c! D4 j# v
. r& o% M) K2 y2 {( E
// Create the list of simulation actions. We put these in6 h0 c: i2 i. m; l# R8 U7 e
// an action group, because we want these actions to be
4 M$ ?* Q) v' }( Z; L a7 n // executed in a specific order, but these steps should
0 ?: E* R+ l: v // take no (simulated) time. The M(foo) means "The message2 x" ~8 o- k8 n3 {8 b; ^
// called <foo>". You can send a message To a particular4 p! o5 ]7 S# O/ @4 E* a7 @4 S
// object, or ForEach object in a collection.
+ t3 O+ W5 Q4 T4 ^. O
* t5 s. e5 M5 [( E! e: b // Note we update the heatspace in two phases: first run- Y. x+ a( D3 {# Q6 I
// diffusion, then run "updateWorld" to actually enact the0 V" J/ S; u8 Z- d
// changes the heatbugs have made. The ordering here is! P ]+ ^" W i3 T: N
// significant!
& y/ q' w# Y( n }. J
' K* }# T3 N5 [0 Z3 k: K- Z // Note also, that with the additional# t; t9 V$ @$ b6 X9 I0 I
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 e6 C1 ]* @* z+ z! y7 g& X! } // randomize the order in which the bugs actually run
4 p. u1 h( R/ D" k( p3 H // their step rule. This has the effect of removing any$ a. y* S. j" \# S; C, E! v
// systematic bias in the iteration throught the heatbug! y. K( I0 d# @# A6 e6 [; w+ d
// list from timestep to timestep: \. R! T( ~& A0 u) r: Z# ^$ {6 V' p
7 L4 ]! H$ c0 E: u$ q- p2 ?
// By default, all `createActionForEach' modelActions have
" K8 N( {# W9 L! d$ M' a // a default order of `Sequential', which means that the
, Y- G, ?4 |& F# b // order of iteration through the `heatbugList' will be
/ ]( S, o ^3 g2 e // identical (assuming the list order is not changed, ]; ^ X# f2 H
// indirectly by some other process).
7 w+ l/ n- K3 E+ [7 C
& `2 }7 K3 ?& {; ]6 b modelActions = new ActionGroupImpl (getZone ());
+ Y6 ?2 P( E% h; f# x7 Q9 g# n# Q4 r4 Z# z) n5 K) u! o6 |
try {
4 ^0 ^! q, M2 u' j% K2 z9 q; m modelActions.createActionTo$message
! M( {+ |% P( v8 l (heat, new Selector (heat.getClass (), "stepRule", false));
# U8 h- q7 r$ {+ Q4 o* ?2 d } catch (Exception e) {# x0 {, s) `+ T9 T5 D5 d4 r
System.err.println ("Exception stepRule: " + e.getMessage ());2 J# U, E: g& X1 l
}5 B3 ]- M" [4 E* V$ b
2 j% i' O1 S/ I$ O
try {
$ L( _ ~( F K- O Heatbug proto = (Heatbug) heatbugList.get (0);
) @% ?) y6 \ o w- L: Y& a Selector sel = " d: k, _( B$ S* G9 b* g$ a
new Selector (proto.getClass (), "heatbugStep", false);8 F' _5 U) |, Q2 R4 X0 n
actionForEach = _# S* @4 g- X$ D* b# P" ?
modelActions.createFActionForEachHomogeneous$call
" i1 K% J7 f5 s; O' Q (heatbugList,
* P n+ y9 {9 L( d& K new FCallImpl (this, proto, sel,
# b1 \* t; g+ d6 l" ? new FArgumentsImpl (this, sel)));, H/ a; j W2 x0 q
} catch (Exception e) {0 C2 i2 |# m/ S/ b1 Z# x. ^
e.printStackTrace (System.err);
! @+ s, u# N, ? }0 X& [$ _4 C7 h2 ^% Z
9 K1 J0 B# a; ]" P4 L% I k& [7 \& M syncUpdateOrder ();
& V& j. s; ?& h1 m; C$ @4 ^& r. K) A! ?: v e9 G! {3 g
try {
. R% o6 e; E' |6 Q. L! V2 X modelActions.createActionTo$message
& U" k0 t1 K9 k% V" v5 M$ \ (heat, new Selector (heat.getClass (), "updateLattice", false));
2 F. K% ]" e# B# {) Q9 y } catch (Exception e) {
2 Y! e3 H( [: h6 Y5 d System.err.println("Exception updateLattice: " + e.getMessage ());
, y8 _, B& F( D% } }) G; }; D6 G: E) N, {# b
; M% d0 |. G4 A1 r
// Then we create a schedule that executes the- Q' B# q( ?& G: Z
// modelActions. modelActions is an ActionGroup, by itself it
9 O, N5 S2 M3 f: a; U, W // has no notion of time. In order to have it executed in% s6 I3 G8 u# `1 N. k1 |
// time, we create a Schedule that says to use the
2 A6 t& t" K! a* C$ j# q3 C; Q& O // modelActions ActionGroup at particular times. This! q6 @2 s& g0 f( U9 T8 l
// schedule has a repeat interval of 1, it will loop every. [2 p4 S& l% v. @# ?- A
// time step. The action is executed at time 0 relative to! r* {1 m- K1 n! @# W& R+ L( K- u
// the beginning of the loop./ N B& ?+ l6 |+ ^( c
0 z, T% o. K% Y- f X
// This is a simple schedule, with only one action that is
# F. R1 S& [+ E: @' T // just repeated every time. See jmousetrap for more
T, N2 y# L$ W( F! _' @. D" M: U // complicated schedules.
! Z( ?5 S$ ]2 C' H6 n
& v$ |( C1 e5 ]; _* } modelSchedule = new ScheduleImpl (getZone (), 1);# f! F( u4 a9 _
modelSchedule.at$createAction (0, modelActions);
3 L6 l! W0 v* N. E0 V/ T& a 5 V. X z5 ^6 Q2 R3 ?, g8 J
return this;
* @1 ?' P+ e- s, z- i6 A( \ } |