HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 k* D; F& i8 t* O4 I, N" v( J4 Z
2 h; V- M! o0 d* s) s
public Object buildActions () {9 ~( g( h, I: o" A5 n+ H3 u9 a2 q
super.buildActions();# \% B( I( ^, O, k# r2 |( c
9 \8 q$ t0 l) K9 o; y0 q7 e, V
// Create the list of simulation actions. We put these in
5 G/ \! C8 g0 Z+ x) _ // an action group, because we want these actions to be
# K$ }4 ~; k- G! o& P% K* U // executed in a specific order, but these steps should" O5 `4 B/ Q8 z' y4 b) h: j
// take no (simulated) time. The M(foo) means "The message
/ }# F1 t. n1 Y" [ // called <foo>". You can send a message To a particular7 @" i% w, z7 X
// object, or ForEach object in a collection.. ]9 ] `2 V7 \6 r0 ~
3 t t6 J# W+ H& h
// Note we update the heatspace in two phases: first run2 F0 E* w/ `5 ]% ]6 E0 i
// diffusion, then run "updateWorld" to actually enact the
8 D* v/ I$ l B! v2 ?" ?& k/ i# C // changes the heatbugs have made. The ordering here is, C8 d O6 `- S* C% @ w
// significant!
& g- ~, M' [' x" ~+ D- H0 y
7 `4 G$ R5 x B% s // Note also, that with the additional! E$ ^2 B# W9 L' W5 P' P
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ v+ D/ ^4 l& `7 z: U
// randomize the order in which the bugs actually run. \/ [3 D2 Y, a/ L' T( @1 V4 W# A
// their step rule. This has the effect of removing any
' q8 H9 |% w4 s6 z# O // systematic bias in the iteration throught the heatbug! Q; r2 \# w2 L, W, Q1 {
// list from timestep to timestep6 F: f: e8 g- ]9 r8 U( H
+ X1 a7 Z' f. _3 u: D, ] G: s5 R$ C G // By default, all `createActionForEach' modelActions have4 Q$ _+ t0 T5 v: e3 M) E
// a default order of `Sequential', which means that the
$ y$ e. t$ ]& m6 a' Q5 b# ~0 @ // order of iteration through the `heatbugList' will be- }3 @6 y1 g& R8 S6 s8 |
// identical (assuming the list order is not changed/ M/ E ~3 n9 N* w
// indirectly by some other process).
+ X% c7 B! Z5 K/ p2 g% }) x 4 s w1 L* B- ^& q8 k! |" \) s
modelActions = new ActionGroupImpl (getZone ());# \, p2 X9 A( C" f$ z0 L8 w
5 |# }# v/ e0 V6 J2 x( V6 D try {3 c/ `, h+ X6 S) V9 H( @) [. k
modelActions.createActionTo$message
* J3 ^! e' p. X- U6 n0 @ (heat, new Selector (heat.getClass (), "stepRule", false));
7 x% f5 S, Z1 i" f } catch (Exception e) {: X- Y2 i" Y: p4 J% `$ Y. Q
System.err.println ("Exception stepRule: " + e.getMessage ());! v" L% _2 K; ^5 q2 ]0 o3 G- A
}6 V) @" U" A w+ G5 d0 d) k( `' A
! [4 v1 w2 u" ^8 S9 l/ Z) Z2 U6 L) h
try {% t3 Z R! ^4 q% r$ ^
Heatbug proto = (Heatbug) heatbugList.get (0);
2 L6 b Y' a$ t6 f& T5 f" ]* } Selector sel =
9 g" g9 I6 _, | new Selector (proto.getClass (), "heatbugStep", false);" {. w7 M5 F) U/ U {3 K
actionForEach =
% R* ~0 ]( ^. z; Z modelActions.createFActionForEachHomogeneous$call2 q1 B0 n* j9 W4 N' x/ r
(heatbugList,( _' b0 Z5 k% ?' `9 ]( p
new FCallImpl (this, proto, sel,# e; S5 k( p7 {" f& Z- p. e
new FArgumentsImpl (this, sel)));% I4 Z/ p: ~( R, u
} catch (Exception e) {! h% l3 s: t) i4 ]# ]- H. k1 ~# j% H
e.printStackTrace (System.err); X; B( }! E5 [) y
}
1 i. K$ t5 W* k3 b1 f8 `
, F9 h8 W6 Z6 O8 B syncUpdateOrder ();) a+ J' Y' t2 R. M9 V
4 g7 z, `& ?1 ?, k) [7 f4 A try {
3 w0 \5 E3 N& {3 Y: B( J% l modelActions.createActionTo$message , M/ v- c" z5 H3 r8 X4 h
(heat, new Selector (heat.getClass (), "updateLattice", false));2 W$ i# H/ u9 g
} catch (Exception e) { x/ p( O2 a/ Q. r' p% x& n N2 E
System.err.println("Exception updateLattice: " + e.getMessage ());5 |' L! f8 B$ i
}
; J0 F: E" k3 Z* O1 {1 P & c$ h6 _' L+ ~+ V3 `/ {1 W8 }! T
// Then we create a schedule that executes the
4 H+ G' R5 c1 \, ^2 k& r // modelActions. modelActions is an ActionGroup, by itself it2 A7 m/ {' T8 l
// has no notion of time. In order to have it executed in
9 b6 V! |2 \ G) c // time, we create a Schedule that says to use the6 l" T8 C; a) a6 ~. j$ Y# v, x0 g. g
// modelActions ActionGroup at particular times. This& `: t! T; w( ^1 P! s3 {
// schedule has a repeat interval of 1, it will loop every7 ^0 d: b Z* r; {% n0 Y+ s1 e* \
// time step. The action is executed at time 0 relative to# t; d; A( n8 v, M8 b" N
// the beginning of the loop., O8 _ n6 G, ~3 `- I% \1 X6 `
- P8 h+ S! Y K; f. _/ B4 P6 ~
// This is a simple schedule, with only one action that is/ J" I; S# t: d7 m) V/ J
// just repeated every time. See jmousetrap for more$ D6 R9 \) J. `6 I# B- U6 O4 f
// complicated schedules.
* V0 o: |& }* ?% l7 c/ w* d $ O8 c3 \+ o8 z# W9 P
modelSchedule = new ScheduleImpl (getZone (), 1);6 }( M( v! i- f3 Q9 ]) u7 I6 i( T
modelSchedule.at$createAction (0, modelActions);
. I* u b3 X' b' T; a4 J6 {1 }2 @
) ? K, x% T( [' A1 ]' ]) ~9 D return this;) l0 ^) j& {! i8 _* P' ?
} |