HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, O3 t2 v0 `+ `9 b% J1 Y5 k4 M+ t8 R7 B* ~& ?
public Object buildActions () {* H2 V0 c# K, r! g% q% L' J* @
super.buildActions();( u9 \% H! q* ]7 s7 r
/ e1 I* T% R/ Y% V' v6 F, r
// Create the list of simulation actions. We put these in
; P M! |6 C7 u a5 l // an action group, because we want these actions to be5 F- N# o; O$ d* \0 W$ U6 F( T
// executed in a specific order, but these steps should, o. V! `) z; m7 J/ W ~: G( m% y, z
// take no (simulated) time. The M(foo) means "The message
' C1 N- [. w% t7 @ // called <foo>". You can send a message To a particular
; H& j, ]. |/ x/ ?1 U // object, or ForEach object in a collection.
* u) `. c8 m5 E0 g1 N5 j . e3 w$ r2 m1 \
// Note we update the heatspace in two phases: first run
% v3 J! u7 e/ _ g& n1 F2 n // diffusion, then run "updateWorld" to actually enact the
7 h- ~6 g& g. p" s" A+ p: @2 ?! R8 Y // changes the heatbugs have made. The ordering here is4 A- t; M) i7 m. _$ o9 R% U
// significant!
6 w2 u: U9 n( H3 n9 b / H, q2 w- P. k$ k: Z
// Note also, that with the additional# c+ _" ~( e" r6 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% o6 F+ w8 B. A$ ^/ q6 W // randomize the order in which the bugs actually run
# ]0 P8 i9 d5 [5 M# \. L // their step rule. This has the effect of removing any% Y! q, j& [5 d$ B
// systematic bias in the iteration throught the heatbug
& X* V% V" z& I# A! V# j0 I( g // list from timestep to timestep. m+ s" u" O8 V5 B2 k) V) r( [
/ o; H; R8 a' q8 L
// By default, all `createActionForEach' modelActions have
$ f; ^. m7 B& ^ // a default order of `Sequential', which means that the
5 H! v4 o5 M, o7 j5 O: ? // order of iteration through the `heatbugList' will be
/ I9 Z% q& y6 [/ \6 _ o; u' ? // identical (assuming the list order is not changed& ^4 K$ A6 R- U/ |
// indirectly by some other process).# V$ O8 |7 M5 ?# M8 N8 R1 m
! v0 o+ C& J, Z4 q( m
modelActions = new ActionGroupImpl (getZone ());
+ \( [0 H3 K. R1 E7 E6 w, O g# l$ C: u# Z
try {
1 Q# d Z6 E& Y5 o modelActions.createActionTo$message4 [! Y& q+ a9 ]
(heat, new Selector (heat.getClass (), "stepRule", false));
8 K2 ^! S( g1 y3 k$ K2 r } catch (Exception e) {, E0 I: S( E- _# e, {$ c4 k
System.err.println ("Exception stepRule: " + e.getMessage ());$ f- R* T/ h( y, E
}
: `6 L1 |" h9 w
# C; L `$ W( E: e" k& B, P try {
/ ]: D" g+ O) X' F4 v# P0 @7 T Heatbug proto = (Heatbug) heatbugList.get (0);
# b! H8 |. s; y5 [ Selector sel =
9 K, K- [# E! c/ Q$ L/ A S( j new Selector (proto.getClass (), "heatbugStep", false);
. ^: W. j9 ?, f) F5 z' K6 ? actionForEach =3 p: F7 b9 _+ e1 V% g
modelActions.createFActionForEachHomogeneous$call
8 e8 d( Q$ o1 ?- ? (heatbugList,
$ u$ A8 G7 w Q9 ]5 W* u2 ] new FCallImpl (this, proto, sel,6 q: I0 N) C ^8 G
new FArgumentsImpl (this, sel)));+ n7 Y8 Z% y! n! K) v; ~8 h( G
} catch (Exception e) { D5 b, D& a, l! E) z
e.printStackTrace (System.err);% r8 p: z' a" ~( m# Y
}
' }# N* t4 L; C8 V) V& y ' ^( O b0 u- i4 `6 D5 P) a
syncUpdateOrder ();9 O' ?4 K4 P/ [: [3 g" f+ C
: O' c D1 d$ k5 _3 h try {
$ j6 h9 ~, m9 K5 J5 o/ I modelActions.createActionTo$message 2 y/ _+ j, l" O: t# t
(heat, new Selector (heat.getClass (), "updateLattice", false));
, R, i1 \# P- p' q8 e } catch (Exception e) {
( B0 _/ [2 b4 V" r1 k6 f: y System.err.println("Exception updateLattice: " + e.getMessage ());
# h$ y/ n% T e. {* y }2 Z0 q1 {+ |: P5 V$ l. n+ \
$ ]3 e* Z, c; J ] // Then we create a schedule that executes the
" E. X! g4 [) s' a$ z // modelActions. modelActions is an ActionGroup, by itself it2 C% Q5 V# a- Q( Y* e
// has no notion of time. In order to have it executed in. ]8 {" ^% Z) v- d+ ^
// time, we create a Schedule that says to use the
$ X: |% |2 f0 A3 X2 R5 N // modelActions ActionGroup at particular times. This+ r8 C. \0 c. {8 \ f2 a
// schedule has a repeat interval of 1, it will loop every! v. u. H$ O- x7 P" [2 H
// time step. The action is executed at time 0 relative to& Q7 r0 r# M+ T! h/ c
// the beginning of the loop.
- h$ B/ g. {& t6 ?6 Q- [4 W9 ?& t0 t' H$ Q. \
// This is a simple schedule, with only one action that is
M3 F; l5 ~! N // just repeated every time. See jmousetrap for more8 {# d0 q7 B2 ^; Z+ ~" k4 g
// complicated schedules.8 U' \7 Q, h" I& D0 t7 A { H
+ X& W) I% D) v8 B! i8 Q7 ^6 K! G modelSchedule = new ScheduleImpl (getZone (), 1);9 j" X" U7 c1 D$ t
modelSchedule.at$createAction (0, modelActions);* t+ ?) A5 `0 N% c
3 I6 t% w* |" F0 D- H6 e& \, P# l
return this;
+ r: W' R" V$ w3 o5 \ } |