HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 s# N9 P. |! Y8 r. i2 A& ]/ d1 S- H s8 j6 C' t/ P
public Object buildActions () {
6 d3 B& v2 t4 \/ r# R9 @ super.buildActions();. x% Q q8 i/ r- u
2 q. E8 D& n. `2 o, i // Create the list of simulation actions. We put these in
7 |* s0 ?5 i* {! |) U! H // an action group, because we want these actions to be: q p* }; z2 `
// executed in a specific order, but these steps should! i6 l1 v: z! E- p' Y+ }% H
// take no (simulated) time. The M(foo) means "The message
5 n2 l2 I) Q( D. B+ Q // called <foo>". You can send a message To a particular$ q. Y8 z8 ^, x* k" G
// object, or ForEach object in a collection.
) k" A6 [/ ^( \0 k' s / ?3 i1 g, Q# g' @7 ~
// Note we update the heatspace in two phases: first run
0 v5 M" K4 D, ~8 t* q4 p // diffusion, then run "updateWorld" to actually enact the
, Q* C6 y9 ~6 u$ g% z6 b( ] // changes the heatbugs have made. The ordering here is' ~* D' ~( t% V5 [+ y; p: x: h7 i) {0 M
// significant!# S6 j% ]% X/ F5 R8 G
! H" @9 }1 v8 d( ?1 U# T$ B) b& _
// Note also, that with the additional
9 h6 w* a9 c* x- E // `randomizeHeatbugUpdateOrder' Boolean flag we can
J L' s8 g8 m7 {! B4 M // randomize the order in which the bugs actually run
/ x& b! u+ [, r! \% y% P9 ? // their step rule. This has the effect of removing any( G1 J1 B7 W9 a
// systematic bias in the iteration throught the heatbug
" y( G( R: _' B. @, }% a // list from timestep to timestep, h. \# R) k( A/ C. C% d
2 G1 Z$ p" n/ ?/ d
// By default, all `createActionForEach' modelActions have: L9 B5 |& K) ~. M% I
// a default order of `Sequential', which means that the! |! m9 p4 I' a- T( K5 m
// order of iteration through the `heatbugList' will be
* u; s# g4 [3 p, C, T, O" W- H // identical (assuming the list order is not changed* R9 t! D E4 v1 F# T& G
// indirectly by some other process)./ S' j- \0 {+ c
/ i8 f! E+ t: L; b. k
modelActions = new ActionGroupImpl (getZone ());2 f4 M( I& n j4 @, y+ x
+ e O: M; l8 }: S; N
try {
r# d8 e7 g. q# f1 I! h modelActions.createActionTo$message' I' b" j' I& y; B; V
(heat, new Selector (heat.getClass (), "stepRule", false));
; ^: v/ O1 w$ V( V: z3 @ H } catch (Exception e) {% `2 Z# V9 t, V' u) d3 b
System.err.println ("Exception stepRule: " + e.getMessage ());0 Z, w! z0 V6 w" p c
}
' b' G) K# i' |1 I1 r: R3 H" m1 y2 X7 N2 Q7 b+ \3 c2 w k1 p
try {2 I7 u4 k6 u1 i6 X: f" E# j
Heatbug proto = (Heatbug) heatbugList.get (0);
+ V/ i6 T' r! z- k! i- W5 r Selector sel =
& g1 n. z6 C' A+ M; o- J# E new Selector (proto.getClass (), "heatbugStep", false);
3 @5 [& s6 [ X: g, G& f1 ]9 k8 Z actionForEach =1 O: m' E, H+ f+ s' a
modelActions.createFActionForEachHomogeneous$call
8 h$ p6 f! ?8 b' f# t" J (heatbugList,4 a6 T& r+ e) A0 V. s/ k
new FCallImpl (this, proto, sel,# `4 {' d! r8 z1 Z
new FArgumentsImpl (this, sel)));- Q+ f, A! {, A( w* A0 [
} catch (Exception e) {
( O# i d& { K' ~% l3 f" N4 C- f e.printStackTrace (System.err);2 V. N, M. M1 X' m
}, H. A% G4 j' t; `7 u+ `5 O; A
+ Q( J: ?/ e4 X) {3 F- ~; [5 k
syncUpdateOrder ();4 ] J& c9 B" m+ O" T2 E
' g0 q2 ?, i; W+ S
try {) s% i" a d8 U
modelActions.createActionTo$message + L7 B7 X" A" o7 D3 z
(heat, new Selector (heat.getClass (), "updateLattice", false));
( A2 `9 c- [2 m' }$ A } catch (Exception e) {1 W) m# Y: R9 [9 b2 z
System.err.println("Exception updateLattice: " + e.getMessage ());
, H4 r7 P. P$ L# I' S% { } J, t) z) K! e
4 \, q+ c/ I; ~0 }: A, U
// Then we create a schedule that executes the
, E( v8 w6 m# g+ J$ s* { // modelActions. modelActions is an ActionGroup, by itself it
" h+ e( Z* u; f/ w# `4 @) Q // has no notion of time. In order to have it executed in3 g0 I. Q9 P' L5 _( t
// time, we create a Schedule that says to use the: m& _* K) k! g, H5 Z
// modelActions ActionGroup at particular times. This9 A* U9 C: a9 {8 x* L- o5 c
// schedule has a repeat interval of 1, it will loop every; h5 ]: t8 T5 ^3 g6 @8 i! K- u0 {
// time step. The action is executed at time 0 relative to2 j- N% j7 h3 V9 b# J L6 v- U" b
// the beginning of the loop.
! s+ {! F l Y/ ?% A$ G! m. i0 f" x' H# P1 j4 _
// This is a simple schedule, with only one action that is
_8 m! ?7 _2 V/ X. U! w3 Z // just repeated every time. See jmousetrap for more$ j/ n/ @( n7 y3 ~& \0 O- M/ {
// complicated schedules.
/ o8 a; [2 R$ G! L
" b$ X" B/ R% q$ E) h0 |) ~ modelSchedule = new ScheduleImpl (getZone (), 1);- ~4 Y/ |0 W4 W1 m [
modelSchedule.at$createAction (0, modelActions);0 q; J6 y( n9 i# n6 K. `( v0 B
9 p4 a1 u! T9 i L1 |0 ]
return this;( I& ]$ b6 U. j; r' q; ]+ n
} |