HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% |2 c# w4 d( W* R. ^* y# i+ ?# z" a# s9 B3 U0 x
public Object buildActions () {- B& n( C/ s. l& [! b
super.buildActions();
) N E5 {& y) Z% v. u5 L) [ 8 i) s8 C# c. k& b
// Create the list of simulation actions. We put these in
2 v* M$ s! v0 X // an action group, because we want these actions to be
# |* z% ]) f& R. r // executed in a specific order, but these steps should
$ G; S O7 b8 w- e! |/ W% y // take no (simulated) time. The M(foo) means "The message
7 Z' @$ S j+ z* C0 H% _ // called <foo>". You can send a message To a particular/ A- [+ t2 v/ p' s! {
// object, or ForEach object in a collection.9 u+ A q7 Z. ]( ]- _' g& l/ `
- c0 B" s( g6 y# Y( j4 H; w ] // Note we update the heatspace in two phases: first run! f' @0 Q+ i4 v" {+ x
// diffusion, then run "updateWorld" to actually enact the" k, S0 g' ^* V! W
// changes the heatbugs have made. The ordering here is
3 @3 }8 T* G* @4 f& p // significant!
- w) q- f4 {& @2 U' D ( `) w, F( s9 c) T
// Note also, that with the additional; \! c* V: i) Q6 c( @
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; M: V6 X4 _3 Y // randomize the order in which the bugs actually run8 W. S3 G9 I4 x/ z* x
// their step rule. This has the effect of removing any
2 r W/ e' ~* s. R) r$ O // systematic bias in the iteration throught the heatbug$ O& Z$ E" k! h1 ^
// list from timestep to timestep
9 J F5 ^/ Q1 W2 U# A1 ?
3 z- V. r. Y, [$ u9 ^! f // By default, all `createActionForEach' modelActions have8 g$ u1 D5 Y, i6 s5 u
// a default order of `Sequential', which means that the9 M+ Y% J6 Q# `% `1 o) A- m1 U
// order of iteration through the `heatbugList' will be
! l& h4 }9 ^/ A: A+ c( N5 t // identical (assuming the list order is not changed
' H3 k, o8 C! \) x1 g# r // indirectly by some other process).
2 y: l' k6 w, M2 z! w
* s* {8 T, {2 m modelActions = new ActionGroupImpl (getZone ());2 ]8 U* ^) E/ [- E M+ P
# a# B" Q. [, } try {' E4 F7 ~' ?& }# ]( `1 N
modelActions.createActionTo$message" @' V' n1 c; D" D" f
(heat, new Selector (heat.getClass (), "stepRule", false));1 V( y) r' Q7 B! u/ M. A6 ]
} catch (Exception e) {" M/ w E4 P J! E* c
System.err.println ("Exception stepRule: " + e.getMessage ());+ R, ~, F# l0 S% E* `
}
8 T/ B2 F/ I9 B1 M+ V% _2 ^( e9 \4 X7 l0 J- [, k
try {4 K+ I4 K/ Q w$ l5 r: s
Heatbug proto = (Heatbug) heatbugList.get (0);
4 \6 `+ E% P* Z Selector sel = / h/ J+ |6 I' o+ G \
new Selector (proto.getClass (), "heatbugStep", false);
% d; U- r( o& u actionForEach =* |" E" L' ? ^. Z( f' S
modelActions.createFActionForEachHomogeneous$call$ N+ C" l4 _2 U) d- u2 o
(heatbugList,$ U3 u1 t5 C' R9 q; g# W
new FCallImpl (this, proto, sel,
) d& x, A/ I$ Y; G) i4 R new FArgumentsImpl (this, sel)));
$ Q/ S! o0 A( `- Q } catch (Exception e) {
; P3 L9 w* B f1 s& p e.printStackTrace (System.err);
, M' ^9 k. v( I; s8 o1 a }9 f0 Z" J t; K% `, \$ w9 t. J
) Y/ u0 v# o, R
syncUpdateOrder ();1 x" q5 x1 q0 I* l* K
. O' v& F# @7 Z* }: K try {) m% ?! q, v! A+ i
modelActions.createActionTo$message
+ }# q: D2 y; l) F (heat, new Selector (heat.getClass (), "updateLattice", false));& a0 K" e4 U/ `1 m9 F
} catch (Exception e) {
' @# T+ i) {' H- I( k8 F- X& E% O System.err.println("Exception updateLattice: " + e.getMessage ());
' {1 N( n- q7 O6 q$ k( R4 U) z; s: l }
- O+ T+ F7 [ v( E8 A" |
3 V' i P. F# D% `; e // Then we create a schedule that executes the
0 Z h* i f4 x. d9 I // modelActions. modelActions is an ActionGroup, by itself it& s: \# [( S3 d4 j' n
// has no notion of time. In order to have it executed in; a9 u9 o3 W) F
// time, we create a Schedule that says to use the
: z5 k. C& E4 D# g // modelActions ActionGroup at particular times. This
; A( J7 A, P: x. Z2 d0 a9 N // schedule has a repeat interval of 1, it will loop every! F' a$ x% x" F! ^0 P! g% l. \
// time step. The action is executed at time 0 relative to
; {; D8 I6 n p+ w2 B0 U; C // the beginning of the loop.
3 u5 f7 ]2 w4 ~" E) |' }+ C& y/ {+ R/ [
// This is a simple schedule, with only one action that is
8 e5 s7 m2 P2 a // just repeated every time. See jmousetrap for more. X% _0 p% e( a1 J; ?
// complicated schedules.
1 N" ^' _6 I4 z' W7 s) r- Z1 N( o
2 \5 t1 f" V9 r( Z5 a' l9 c! z0 b3 X) _ modelSchedule = new ScheduleImpl (getZone (), 1);4 W6 P( [5 \5 ~) B9 H4 G
modelSchedule.at$createAction (0, modelActions);
% M7 Y* G, X7 K. |) n5 w
- J' ~& i# T, O4 B return this;7 M, x8 X% \5 d0 m. n# P
} |