HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ r6 R$ k7 K% `" K* w8 R& R% b6 `
n' F# u# P- D5 \* F
public Object buildActions () { Y' _! S% V. [( x' I9 q1 R9 {
super.buildActions();8 _- h9 J" ~9 P" C; T
) _; e* h) {/ M' N // Create the list of simulation actions. We put these in
) O2 y& ~% N3 \- Z2 C7 E4 G // an action group, because we want these actions to be: ~$ Y/ Y. N% e3 Z- A* ^. L! @
// executed in a specific order, but these steps should
1 M- F- k- I* c m' \ // take no (simulated) time. The M(foo) means "The message0 K" t! E: J$ [
// called <foo>". You can send a message To a particular# `/ W2 C+ y& M v/ T# d8 M
// object, or ForEach object in a collection./ [5 b8 j5 O% T' w7 ?, E1 O" q! v
9 Y& E) i+ q7 x/ Q! V6 j( s/ _
// Note we update the heatspace in two phases: first run
" \! L: `- E, k // diffusion, then run "updateWorld" to actually enact the( ^4 }3 p) V/ D( G' }) s7 `
// changes the heatbugs have made. The ordering here is
& j) h* W9 I* o. g9 ?: B // significant!
]- n! T5 j* W, G
; W3 L# _6 H6 k- W& L // Note also, that with the additional) l( C2 I6 T) U
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 U" U7 M# O1 L& v* M
// randomize the order in which the bugs actually run. j3 D0 ^+ t0 N8 j! f' _
// their step rule. This has the effect of removing any5 S b: U% @7 f
// systematic bias in the iteration throught the heatbug
+ A* b( a" R7 f8 s! X // list from timestep to timestep
2 O. n! Y5 ~! y6 B- |' E+ b, o A- x ! j8 {& K- L' _9 ?
// By default, all `createActionForEach' modelActions have% [! I7 h/ \5 [7 w: R/ |0 w
// a default order of `Sequential', which means that the% C! q: X3 b, Q6 ]# H9 u& A7 r u. w
// order of iteration through the `heatbugList' will be" Z7 r; e: d* g% l9 S
// identical (assuming the list order is not changed
+ `; ?8 m" D5 s+ j // indirectly by some other process).
/ n4 o' a; E- a8 @2 B; l
3 R7 Y3 T6 X4 v modelActions = new ActionGroupImpl (getZone ());% }7 N8 A, Z# p9 {
/ [$ | H$ l/ Z; A$ C try {
J' x4 ^* H, L modelActions.createActionTo$message
I! v8 p$ j* T- y (heat, new Selector (heat.getClass (), "stepRule", false));4 ~ a; b( ?$ m% q" U; Z7 _
} catch (Exception e) {7 @: z9 ~8 u- t$ `
System.err.println ("Exception stepRule: " + e.getMessage ());
c2 d9 W i# F+ s }
7 [4 k5 n7 t- W5 s. _, t
1 N, ?6 }) ~: r0 j$ {2 P3 m8 b try {7 z7 J1 m- ~& c P8 e
Heatbug proto = (Heatbug) heatbugList.get (0);
9 b8 H1 c0 D4 [3 x! w/ N' e7 d Selector sel =
4 j# h5 M6 l, l1 @ new Selector (proto.getClass (), "heatbugStep", false);
( p) w9 L0 D4 Z; t) V. C5 a" w actionForEach =* S8 h; T9 O: I; S4 F
modelActions.createFActionForEachHomogeneous$call6 N( F" h7 I* a. S" D/ ?6 ^; k4 ]+ s
(heatbugList,2 k* W4 l6 R3 l6 \) h
new FCallImpl (this, proto, sel,
/ v2 \2 g3 u8 n5 v5 s$ T new FArgumentsImpl (this, sel)));
7 N j$ t! {; Q3 T } catch (Exception e) {
% W; F+ f$ q( ?5 N S p e.printStackTrace (System.err);# c8 k- P1 i( C: K2 C
}. A a/ t6 l' A$ B. E& q! t& i
# U+ a. ~! p* w+ [3 s syncUpdateOrder ();: s9 \+ `, T! E& ^5 |- L9 G
" W, x) q' v! T( u8 q7 l
try {
# N1 c# U2 W0 |2 n modelActions.createActionTo$message
7 b. B5 t8 w: c1 L (heat, new Selector (heat.getClass (), "updateLattice", false)); S& T9 R0 \- |: W; R: Q' P- Q% B
} catch (Exception e) {
# s2 x/ {4 K0 k- E System.err.println("Exception updateLattice: " + e.getMessage ());% X+ s" n$ C; ^6 J+ Z
}; ]8 b8 C/ ^3 Y) A0 H! W; a
6 {3 |* P. Y1 h2 r$ W' A2 o# K* M // Then we create a schedule that executes the
, N7 b' Q: n8 \% X/ t // modelActions. modelActions is an ActionGroup, by itself it7 T( T! k; H2 E( g/ t
// has no notion of time. In order to have it executed in
* z$ Q' R7 V% z6 O // time, we create a Schedule that says to use the1 [# @# a, e8 u s" [5 V- d1 O1 {8 C: S
// modelActions ActionGroup at particular times. This
& y( Q3 G1 j3 s. T8 p3 _ // schedule has a repeat interval of 1, it will loop every8 `, ^1 G, y8 X" P$ V. ^0 `; [- h0 K
// time step. The action is executed at time 0 relative to
1 ]. }6 H+ H$ p' U // the beginning of the loop.
" _1 z0 p1 J+ l, S$ |. C, e F; y
, ^- j0 q6 X4 J ?' q+ G, K! D // This is a simple schedule, with only one action that is
7 E9 m+ x. O) h% Q // just repeated every time. See jmousetrap for more
7 g3 l1 o: u r1 _0 R$ y! ` // complicated schedules.2 j! ~3 f. c; |4 ]
. d- o7 U4 W/ g; g# i2 r( m2 G
modelSchedule = new ScheduleImpl (getZone (), 1);
: }; V; _: h, ?# H$ f9 U modelSchedule.at$createAction (0, modelActions);
u/ G- X) Y, j/ Y c - w) ~$ j8 `4 i9 J0 s j+ r7 g' |! T
return this;
, h) l1 f+ }. W+ f" D6 M) l } |