HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ B# G/ R' f* a4 r/ e/ j4 g7 Z7 Z n' K3 f' j
public Object buildActions () {
0 n* G& u& o5 V0 N4 _ super.buildActions();
( \9 P. D3 e( G# L/ y4 J: N ( H& G7 @. o. s, \& p, x# l
// Create the list of simulation actions. We put these in
3 S. u2 i* ]' c9 Y) t$ ^6 S/ W // an action group, because we want these actions to be
, A5 e- t) _. y7 ~ // executed in a specific order, but these steps should
7 n5 a+ t) s3 J/ a2 {; b9 @ // take no (simulated) time. The M(foo) means "The message
/ u" C9 B* C0 T1 }: k // called <foo>". You can send a message To a particular
: L$ I8 K9 K' e8 C- O2 w! ^- | // object, or ForEach object in a collection.4 x' m ~5 \7 K6 M) Z% l
6 u: F1 R* H' f8 u( v
// Note we update the heatspace in two phases: first run
5 h/ e9 N' z% Z" _7 u* ^8 i // diffusion, then run "updateWorld" to actually enact the q5 y( P2 P! Y
// changes the heatbugs have made. The ordering here is( p+ {" F; C3 _
// significant!
+ C( P9 N: S) ~! ` v0 j
+ `5 @) ^5 s' ~& Z1 W; x // Note also, that with the additional
( G3 D8 N# C, f: P' {( r2 K // `randomizeHeatbugUpdateOrder' Boolean flag we can O7 a D$ H! R- W$ {
// randomize the order in which the bugs actually run( O& M9 O/ C4 c5 B- h
// their step rule. This has the effect of removing any
' }* f0 l4 ^# E7 B: G" ? // systematic bias in the iteration throught the heatbug
8 W( J1 c& ?3 b* l3 }2 R: [- } // list from timestep to timestep: i y4 }7 P) d4 ]' K4 ?
6 K4 B5 R0 Y ~- `. c0 \7 B+ v
// By default, all `createActionForEach' modelActions have
. }3 M8 x9 v; A* R- ^- Q // a default order of `Sequential', which means that the
/ j6 u1 m$ w' Q: T1 m+ d+ ` // order of iteration through the `heatbugList' will be
7 v! ~. d4 z; Q/ B) d // identical (assuming the list order is not changed* H9 q Z8 p; k
// indirectly by some other process).
4 ?; q2 I) a% `0 n
% ~" c7 |+ W- @( j" P modelActions = new ActionGroupImpl (getZone ());9 F2 g& G( j( R" _0 \' t
3 B7 n& Z* T Z4 w& X( e+ Q x7 z0 J
try {. `6 e- @5 g- H+ n
modelActions.createActionTo$message
" u# K4 W3 Y4 J, P (heat, new Selector (heat.getClass (), "stepRule", false));6 ^$ g, N' b: R' s% A3 s5 Z; M
} catch (Exception e) {
7 G& {6 q$ W" I: C5 {5 } K6 B3 d System.err.println ("Exception stepRule: " + e.getMessage ());
2 D4 z$ m* M+ I d v. N }
, G* y9 v# B- G6 b0 ]5 u5 Q( A" X
- q, W- c% u$ W4 f try {- `0 S7 C8 `, Y6 f }
Heatbug proto = (Heatbug) heatbugList.get (0);
7 x; w. G5 h* D0 S0 m+ ~' K Selector sel =
' @# E/ \- D3 Q) K( z new Selector (proto.getClass (), "heatbugStep", false);9 ?/ \6 G: ^3 n* j- _5 l
actionForEach =( ^% d: J: L R/ b- Y. r' f# q! Z
modelActions.createFActionForEachHomogeneous$call/ {7 p# i# p: f; q, s [. c
(heatbugList,
7 _% g+ p3 I7 a6 r' w. z new FCallImpl (this, proto, sel,: b! A& v. ]! k, B* r1 @8 e
new FArgumentsImpl (this, sel)));" `9 }3 x& G0 i3 i
} catch (Exception e) {
* u$ ~& Q' j. B; T2 E% ~4 z: d e.printStackTrace (System.err);
8 l( K7 p9 E' M) g. t" O }
* d# f' @: b! C$ E! ?% V% { ; a5 b; F7 @6 i/ z. N/ S
syncUpdateOrder ();$ S. o" o9 t }8 o; d
, ?9 R( M: L* o8 P* D
try {
; P) l. x# T- |1 x2 {0 p; Y modelActions.createActionTo$message
+ w; P5 W! Z7 x0 B (heat, new Selector (heat.getClass (), "updateLattice", false));3 n: K' D0 [9 e+ d
} catch (Exception e) {
. ]1 q4 P) `: k: k. K System.err.println("Exception updateLattice: " + e.getMessage ());
( h# T2 z+ H8 ~- X9 W# ^, m }4 b1 n/ p# A6 Z* H/ s1 q8 [+ I
4 `" c% l P B9 ]# E // Then we create a schedule that executes the; }1 M9 e Y; m. S
// modelActions. modelActions is an ActionGroup, by itself it
- f% j( g1 v! l* f e# s8 w // has no notion of time. In order to have it executed in
' n- R0 s5 V. c7 L# ^) m2 p8 F% e // time, we create a Schedule that says to use the) s s* Q, `! e: f7 S
// modelActions ActionGroup at particular times. This
- f# r& k0 Q% O( G // schedule has a repeat interval of 1, it will loop every! x" f, z' @& o5 T
// time step. The action is executed at time 0 relative to
" @" @: O: a2 F& I& U" w // the beginning of the loop.( t L& ~ g5 g8 w1 c9 n
( z* F' u0 R; R/ ^! v
// This is a simple schedule, with only one action that is
]1 B7 O+ Q+ x6 S9 x0 A // just repeated every time. See jmousetrap for more) Q9 w; L8 U! q
// complicated schedules.* G) I+ R; x1 }, w+ n- j7 C
- H: k; ]4 l3 v) y( `7 o* w modelSchedule = new ScheduleImpl (getZone (), 1);* Z! _$ [# m4 }, o; A9 A
modelSchedule.at$createAction (0, modelActions);1 v. `; U7 l6 G1 x \# J. j' ?4 w
/ X7 y. ^$ L5 X6 i& l/ p
return this;
+ R' l- N! ?+ n5 B z( o } |