HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# B/ ~; Y# F2 L+ \+ g3 Y- O/ \4 p' w# X
public Object buildActions () {9 L8 j& Z3 P" {5 _
super.buildActions();
3 d: `' J9 S* F, T 3 i' \5 u- z/ Z1 C
// Create the list of simulation actions. We put these in
5 y# Y) W6 x" w* j, w' ` // an action group, because we want these actions to be8 a) h5 L( i2 [- _1 L
// executed in a specific order, but these steps should6 _. m9 E) T. v; q2 G
// take no (simulated) time. The M(foo) means "The message
5 m' d1 h* R: | // called <foo>". You can send a message To a particular
& A, B& ]( Y' ^. V# r- | // object, or ForEach object in a collection.- r, f7 A! {4 F. o
8 h: z/ `0 @5 g" \; S
// Note we update the heatspace in two phases: first run1 Z$ J. h; ?( q* @6 y* |; [
// diffusion, then run "updateWorld" to actually enact the
1 i. `- ]8 |4 F& M# {, W // changes the heatbugs have made. The ordering here is8 J( z7 o: Y& u) _# H. |
// significant!3 @- N+ h/ ?6 T; V( Z
7 t! G8 j$ _4 Q: u+ v0 S* D0 l // Note also, that with the additional
) N* T ^, c. T1 n% s" O/ N // `randomizeHeatbugUpdateOrder' Boolean flag we can p' ?( M! b+ N2 b7 S
// randomize the order in which the bugs actually run5 Z/ Z, H, }: C9 G6 e, O9 b7 ]
// their step rule. This has the effect of removing any
9 }: c4 D. L8 e/ J' N9 Z" } // systematic bias in the iteration throught the heatbug
: g; F6 C" T. s# k- S( v* z: ? // list from timestep to timestep1 Q1 H u. S9 F, r- C$ R
7 }9 p, i8 O$ Z% q% W. X' c: @ // By default, all `createActionForEach' modelActions have
A; O( d( b0 v7 Z // a default order of `Sequential', which means that the% V; r: E0 ]3 K! N5 w
// order of iteration through the `heatbugList' will be6 X/ S/ m" p& e! A* d
// identical (assuming the list order is not changed
; w. @! y" B% W& t, m& X! S // indirectly by some other process).
% L- P. u+ `2 U" @6 B3 P( i " S$ i1 o7 s' N7 g
modelActions = new ActionGroupImpl (getZone ());
2 W% f7 b3 L( p9 I
4 F; v2 E2 K: u) B6 D try {. p2 C+ l, D2 \. \1 X6 _2 T" T- M
modelActions.createActionTo$message
# I) E5 P& {- Y ?- X8 ^ (heat, new Selector (heat.getClass (), "stepRule", false));
* p1 z# b4 Z& t$ s0 Q/ b } catch (Exception e) {
3 b4 x; w( N F$ d! f: p+ w; @ System.err.println ("Exception stepRule: " + e.getMessage ());
6 w8 {! z6 T8 O# D# g! q; C, a }! W" ]3 Q W2 b) h8 C% \
7 | e% q8 a! Z& V0 w S
try {6 u/ r5 r/ D7 }. Z/ @( ?3 G0 l
Heatbug proto = (Heatbug) heatbugList.get (0);
. O# u3 Y1 [) Z8 J5 Y. V% e Selector sel =
1 A+ x0 I/ c/ y+ r8 Z* o new Selector (proto.getClass (), "heatbugStep", false);
8 c+ P- Q( m5 I+ Z0 m9 n6 o. b actionForEach =1 V" _$ S* U4 d5 D: ^! s) g
modelActions.createFActionForEachHomogeneous$call
* x% [, |! ]5 ]9 m5 S (heatbugList,
, ~2 o- O9 X* l4 T new FCallImpl (this, proto, sel,4 w$ z8 a4 N+ H. |
new FArgumentsImpl (this, sel)));8 T" L% ~) ?# k9 R4 X, b0 E! ?. C
} catch (Exception e) {
; I. i# p+ G- X8 Y+ K! M3 _ e.printStackTrace (System.err);1 @" p% h0 j1 [6 G7 ]- ?' I
}
! A2 \, J; D( a# P$ U. }) O& @
6 ]3 j5 p9 B9 u. Y$ f, S; l+ n4 t syncUpdateOrder ();
% F5 a7 g% E9 m+ v! i. J9 c0 L4 N' h# F8 G: K3 N7 T
try {0 F' r. H' p8 n- P
modelActions.createActionTo$message 8 U+ z9 x( K; M5 S% |( h
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 B) }8 n7 @$ }1 e5 ] } catch (Exception e) {
2 K4 e# a6 F, a9 C% c- u System.err.println("Exception updateLattice: " + e.getMessage ());
! A# W+ p- N- V6 l8 b- N# K- i }
* j0 B- U8 ]$ P) B( x. u$ |
; j) P' n q& l# v, ^ // Then we create a schedule that executes the
9 w0 t5 b- Y a1 @ // modelActions. modelActions is an ActionGroup, by itself it4 i6 x& e* j: J9 w- n
// has no notion of time. In order to have it executed in
; o" m, `4 h2 I/ S* R // time, we create a Schedule that says to use the
6 P5 i: w" k- m+ V! b+ z' C$ L( o# h // modelActions ActionGroup at particular times. This7 w7 {& F+ b% ~% U1 n
// schedule has a repeat interval of 1, it will loop every1 K3 T5 G1 I( c# L7 q
// time step. The action is executed at time 0 relative to
$ Z! T6 k, f* M4 u; V& K* N // the beginning of the loop.
o8 b# z: X0 ?3 l' @
5 F# p+ u: S% M s // This is a simple schedule, with only one action that is. Y* D- o" B! t% R8 a
// just repeated every time. See jmousetrap for more" n8 j$ b3 D- |3 ]' w8 M7 K
// complicated schedules.; p: T/ T7 ~. |# @ o a; r
$ d9 _, h0 u4 ^5 @ h8 T G
modelSchedule = new ScheduleImpl (getZone (), 1);( K. {9 _) j* E# A9 w, t# Y" l3 [- I
modelSchedule.at$createAction (0, modelActions);# L" D+ I& [/ _$ R" r! g
" m' h' G& c8 s9 j1 G) C
return this;2 f5 h5 ? I9 v$ k. m
} |