HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 }; O) R( a2 i6 S( ]6 Q
5 n$ A; h% [; ^ public Object buildActions () { m( R [: ^1 A5 w$ Y
super.buildActions();7 O6 n B ~- T( n" f* A
- V Y1 I, {- r3 w* C // Create the list of simulation actions. We put these in
$ X" e/ T+ H7 C8 }& l // an action group, because we want these actions to be6 n4 D* x; Z7 t* i7 f
// executed in a specific order, but these steps should8 s- x1 f+ W! t. R; G% F) ]
// take no (simulated) time. The M(foo) means "The message
5 B3 f8 v. L; ^" J) R. m // called <foo>". You can send a message To a particular
# M! D8 r7 [1 R: ?" ?4 V // object, or ForEach object in a collection.
# c$ B) a% f% ~
: V; |% u! w5 i+ }% y" Y( L" ` // Note we update the heatspace in two phases: first run9 p$ G) C8 N3 s) o
// diffusion, then run "updateWorld" to actually enact the
( T6 B% {' f. u# L$ _) m7 {. X: \ // changes the heatbugs have made. The ordering here is0 e; z$ I" q2 a9 x. u9 u
// significant!+ @' O- @3 N( @5 L6 Y! _
! v3 K3 Y% w; i; q+ D
// Note also, that with the additional5 ~7 L5 g. y0 |1 `/ n4 I) K9 Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can- V1 R! c) P- H! B& `% p4 N! h
// randomize the order in which the bugs actually run
- i$ e, G& x& D4 o/ c) t! E // their step rule. This has the effect of removing any' f5 e8 h: Q" e A3 Q: x F# m5 N r/ u
// systematic bias in the iteration throught the heatbug
- T. O: }1 _3 g2 {: H // list from timestep to timestep
5 q& U# h! l! R " Q' w! a2 e" @! J9 u# Z3 Q5 ]
// By default, all `createActionForEach' modelActions have4 ]) q, y& _) X- K' o: r% @
// a default order of `Sequential', which means that the
; w2 \; W% W d. G* M) U // order of iteration through the `heatbugList' will be. `* F- P" I+ h$ `
// identical (assuming the list order is not changed
}8 F7 N7 v4 V% O6 W! s // indirectly by some other process).
9 f! q5 K# h+ O
- ]+ D/ c! h6 H2 S% F modelActions = new ActionGroupImpl (getZone ());6 h7 g- z1 j+ A$ F' s/ H
3 E, c$ g" B- v8 h; u$ B: M3 z
try {9 g9 D$ e! f6 }3 p5 \$ x9 `
modelActions.createActionTo$message: W: L: |5 W9 }% w3 P* m
(heat, new Selector (heat.getClass (), "stepRule", false));
4 W, W- ^5 d- a6 D0 j } catch (Exception e) {
( C+ N3 L1 q& |" I System.err.println ("Exception stepRule: " + e.getMessage ());* v) p1 I, V# }6 q, g
}
; E l3 k% @7 S& u, j! O7 A4 D- S, G) N/ \/ o& @
try {
3 q; h# ^9 M! ?/ E( ]/ i8 d; ?. X Heatbug proto = (Heatbug) heatbugList.get (0);7 n3 K' m) h( K* N
Selector sel =
" k& K, r- L2 N" f: E$ j new Selector (proto.getClass (), "heatbugStep", false);
4 A3 P2 K; R. D$ [& i actionForEach =) \4 s3 ^( B7 h H2 q, Q9 a# S
modelActions.createFActionForEachHomogeneous$call
. O0 S9 ~( ^- x' K (heatbugList,
6 s( T2 E3 J+ K! G% ` new FCallImpl (this, proto, sel,
( b3 v, c+ u) Q+ j3 R0 e: ` new FArgumentsImpl (this, sel))); |9 }4 Z* h& f4 I
} catch (Exception e) {" d! B/ I+ L y8 C# w
e.printStackTrace (System.err);0 _ {. x8 t7 q5 `9 p" W$ g+ F' g
}( t1 L0 e/ a ~- u% l( S4 l
" {. ]6 U; q7 j9 M# I0 E- g' Q syncUpdateOrder ();( _# x8 g% z% l: C! d$ H
5 ?& Q1 s: M7 f try {/ t5 J6 o) T; [' Y) b$ E5 H/ B b
modelActions.createActionTo$message
- C2 R6 d( b" E+ L( b7 V$ k& |, i4 Q+ e (heat, new Selector (heat.getClass (), "updateLattice", false));
# y) q5 j! C7 ]+ V7 K, q } catch (Exception e) {3 |% j! Z$ B0 F. K
System.err.println("Exception updateLattice: " + e.getMessage ());
; c& M% i- b8 p- @3 d! j% e/ l }" f( P( w4 f2 H
6 O. |( g" ?$ X& ~0 U
// Then we create a schedule that executes the7 M, d" b" }$ M$ n% {( r/ J) J- m; o
// modelActions. modelActions is an ActionGroup, by itself it/ S3 [# L$ `: T* t
// has no notion of time. In order to have it executed in2 F1 u: I8 [0 d5 f- N. a' a- T
// time, we create a Schedule that says to use the5 j2 {1 ]7 @* X; f5 {
// modelActions ActionGroup at particular times. This T% W$ p6 E4 q: T5 z4 P# ~
// schedule has a repeat interval of 1, it will loop every& m% c2 V% o9 G/ H7 c/ v. V
// time step. The action is executed at time 0 relative to9 }- F( _+ N6 o2 J* m K$ Y9 p
// the beginning of the loop.
# S# [- \( d$ r9 M# D9 c
& J4 q( U1 B; e // This is a simple schedule, with only one action that is
4 a6 u, D; a7 n! U/ q# v ? // just repeated every time. See jmousetrap for more
% O5 K; Y; H M0 e" J- U3 x: C: e // complicated schedules.
6 F$ p5 V2 B8 c' k; |
4 O; r2 [- [8 K modelSchedule = new ScheduleImpl (getZone (), 1);
+ ~) [, V% M+ p5 n- U8 x modelSchedule.at$createAction (0, modelActions);9 v2 W) a N0 X0 f7 x
0 U8 T K5 i4 c
return this;: g! \1 m6 u) F; y& x# {# _
} |