HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' A! C0 C) S$ u2 k8 S8 l7 `8 L8 {3 c: q4 b
public Object buildActions () {
% I/ [+ [) N" H" J super.buildActions();
" _! ?4 o. C6 O, G& C3 r3 N
$ r$ t5 x3 N' m) u2 o N* x. R6 ~ // Create the list of simulation actions. We put these in% q7 P9 _4 f/ Y) ?% I1 K" N
// an action group, because we want these actions to be9 s( _) p7 d+ K/ I9 T4 c
// executed in a specific order, but these steps should
. Y" V, J! F) }0 b/ K2 [ // take no (simulated) time. The M(foo) means "The message% ^3 ?" I0 @ J; J& U( i. m+ N
// called <foo>". You can send a message To a particular, x( L4 p2 E# v. n- Z+ X! f/ B1 ~
// object, or ForEach object in a collection.
: `. X* f/ P3 S, P
, }/ ^2 [) P5 A1 T // Note we update the heatspace in two phases: first run" N$ D% r3 l9 o# I$ I$ `
// diffusion, then run "updateWorld" to actually enact the! w# q. f2 p# K
// changes the heatbugs have made. The ordering here is
% p& r/ k8 w% {* f8 ` // significant!. R b* N4 |7 t- y& m
L! _0 W8 H7 i# G2 U& g
// Note also, that with the additional* I2 X1 w8 N. r: [: l" i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& G: x. b% v4 A. _" ] // randomize the order in which the bugs actually run
7 o; o/ H# ^) h# B( t/ S8 K // their step rule. This has the effect of removing any4 ^( T$ L# {& ^* o
// systematic bias in the iteration throught the heatbug
+ h- d& ~) U! E) P; r // list from timestep to timestep
6 G6 K" \3 R' G
$ H5 N5 J% ]' C // By default, all `createActionForEach' modelActions have K+ } O, N; I
// a default order of `Sequential', which means that the
& _& T% q( C9 Q' a" F, P1 e/ T // order of iteration through the `heatbugList' will be1 S( r }" B( N# h
// identical (assuming the list order is not changed% m( ?. }5 M! [
// indirectly by some other process).
% a: K9 o& F. `1 t8 K( d
' t% G& q& M, s modelActions = new ActionGroupImpl (getZone ());
. C* u% I% B! P' c9 l" C C5 K6 L7 ?) Y8 A7 ~3 E
try {; a2 [1 S7 g, G
modelActions.createActionTo$message
7 m6 H% M: @. s3 n: P9 k (heat, new Selector (heat.getClass (), "stepRule", false));
1 {# E0 Z/ `! {) W& j } catch (Exception e) {
0 } W) G/ J" Y, c5 a2 _6 y System.err.println ("Exception stepRule: " + e.getMessage ());( |! W) {6 r$ m5 a1 { {) B
}6 |5 I' ~+ R, d) ~: x$ j
; t- a6 [# h7 z1 z
try {
' ]8 ^ \ u- D. A4 P Heatbug proto = (Heatbug) heatbugList.get (0);
* }6 g" |- y N ^/ l" h0 z6 M Selector sel =
. F/ | w' {9 P' u: s/ V new Selector (proto.getClass (), "heatbugStep", false);$ U1 w: e) R4 Y* F; r* }: v3 K
actionForEach =: D9 I# W8 f/ q) {9 X+ T
modelActions.createFActionForEachHomogeneous$call
/ G7 K/ `- r5 s6 S) T% F (heatbugList,
2 m D5 \+ o" [% G/ ? new FCallImpl (this, proto, sel,
% ?1 b# l! Z- A' M new FArgumentsImpl (this, sel)));
; D- T# o Y* X& I# A5 K } catch (Exception e) {
, I+ ~- O8 u# u5 A5 G3 [+ Z. D e.printStackTrace (System.err);8 \( R$ T+ [0 j
}
# n+ y, y' }, a! x+ {- d
; q' D0 M- q' M5 Y* Q. ^8 [ syncUpdateOrder ();
7 F v/ q7 z0 W' l0 t/ t, o4 t* Z, M
! ^2 q n% ~ \, n try {
: _: l; y0 F9 K6 m modelActions.createActionTo$message
" k" K. L# |5 K, X! o6 D% O (heat, new Selector (heat.getClass (), "updateLattice", false));
! ^4 x& d" i/ \2 { P) E+ n4 x W } catch (Exception e) {- w. x" a! O! H r
System.err.println("Exception updateLattice: " + e.getMessage ());
& ?; \6 h) a7 t# d4 T2 G, e! e }3 U) [6 E o* n
! O: ~( ^( `, o2 |
// Then we create a schedule that executes the
, J) o5 p. u: L // modelActions. modelActions is an ActionGroup, by itself it, e* i0 c9 [5 k$ x, l7 Z7 t5 h
// has no notion of time. In order to have it executed in
; L- e# M, O7 Q: S; l4 o2 D // time, we create a Schedule that says to use the* I) ^& ] D. D! }- Y# ]1 w, T- o. F
// modelActions ActionGroup at particular times. This
4 P) m* i7 W$ [. @ // schedule has a repeat interval of 1, it will loop every
- a6 y/ W4 K# U5 D6 U // time step. The action is executed at time 0 relative to; w8 S. ]% r- W' S' M7 C; m% ]8 g
// the beginning of the loop.4 k3 Y. I+ n- F) f2 V }) k
0 a6 B& ]# e9 z6 h$ l7 q
// This is a simple schedule, with only one action that is
" s5 c- I. | j, d/ |( W // just repeated every time. See jmousetrap for more
: \% |6 M4 }; ? e1 l // complicated schedules.
3 q4 K8 B2 W7 [- z
- u. l& Y3 j% x0 j: k5 Z, K4 B& V modelSchedule = new ScheduleImpl (getZone (), 1);
' ~4 ^4 A( ~0 l4 g+ H modelSchedule.at$createAction (0, modelActions);
8 A" d9 v% L. B0 ?) L ; ^; R+ h5 Q# j; C
return this; a5 ~8 X- G5 d, P9 Q9 j0 R9 D
} |