HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 I8 ^/ Y: H4 J( M3 l {% t `3 E1 C
public Object buildActions () {& F4 _1 o7 {! `$ J( r3 W
super.buildActions();$ n1 Y, y# k* @, @6 T
& c$ m. |5 ^* s // Create the list of simulation actions. We put these in
' J8 p$ ~7 c+ ?- D3 a // an action group, because we want these actions to be* {+ u# I5 B) d! s Z
// executed in a specific order, but these steps should6 ?. _9 x* R: h! w* J4 V& y/ g' Q
// take no (simulated) time. The M(foo) means "The message
2 N2 u, p& B& ^& r: ?) ~" s // called <foo>". You can send a message To a particular* F [4 d# M8 c F
// object, or ForEach object in a collection.
' v/ E: g& `; T 9 C2 X Z2 E) j& u x) z% G
// Note we update the heatspace in two phases: first run
1 @% [9 d2 I" I! j4 y, F ]; Q // diffusion, then run "updateWorld" to actually enact the
8 m3 S- H+ A$ b, ]5 k // changes the heatbugs have made. The ordering here is
3 I. o' c' Z V6 } // significant!, o# ]% _' R, Z* Q5 ~+ n; H3 c
. o! _' P2 P; P% _# S; d" S4 y% ]) ^ // Note also, that with the additional) L. R, R* _. Y+ E% }
// `randomizeHeatbugUpdateOrder' Boolean flag we can( S$ s3 b# @7 U% d, R
// randomize the order in which the bugs actually run+ u9 B8 w. u0 B, `6 s/ @
// their step rule. This has the effect of removing any3 E& E) I# K" E3 P s4 t2 R
// systematic bias in the iteration throught the heatbug
: ~0 z; h5 d" m8 r1 V // list from timestep to timestep7 W' s( m" ~4 J) T# K3 Z
5 e0 d% H# t% \* d7 _
// By default, all `createActionForEach' modelActions have
* e9 j) }1 W3 g& C, ^ // a default order of `Sequential', which means that the
$ I3 S* V. x% n: k // order of iteration through the `heatbugList' will be! V w# H8 S3 O: y% a* j4 a
// identical (assuming the list order is not changed
3 H) d9 b7 c* F( N% s // indirectly by some other process).
6 Q0 P* V G6 u/ t x2 L! B1 L * |$ S& K( X( c5 Z8 X- Y' p/ B t
modelActions = new ActionGroupImpl (getZone ());7 s% J2 p* ?5 h3 e8 ~: V- {3 p) I
/ g7 e- {* u; q/ o3 T+ g$ s
try {
2 ?( f: b0 r5 M! U; g n modelActions.createActionTo$message
, g h9 b. ?+ j0 |! p6 p (heat, new Selector (heat.getClass (), "stepRule", false));6 Z" Z5 }& z4 D% b1 p' r; d: }
} catch (Exception e) {
$ Z6 V" K% j, l/ g3 A7 e; a) _ System.err.println ("Exception stepRule: " + e.getMessage ());
3 m' v8 b2 M$ r& D3 W( z9 g# Q }
% f0 Y' [+ y) u# `: e
+ y1 }$ y0 z9 ? y0 }5 r try {
- `: y/ W- }# l; `! `6 ` Heatbug proto = (Heatbug) heatbugList.get (0);
, {, H& A5 _' T Selector sel = 1 x: E4 D: x; ~! K7 N1 ?+ ~
new Selector (proto.getClass (), "heatbugStep", false);
3 E5 @3 h8 U5 J+ J! E; o/ M2 ` actionForEach = A n1 ?* r$ ?/ u3 P5 d# L- a
modelActions.createFActionForEachHomogeneous$call
0 y* a& [& I( M+ b9 b1 ]% M; x8 x (heatbugList,( U6 h, y. U0 Y! q2 x# H
new FCallImpl (this, proto, sel,
* D. Z) {8 V0 ]1 ]( X new FArgumentsImpl (this, sel)));
$ N$ T' h6 H: I8 { } catch (Exception e) {: }, F- P2 S* n. N. T1 E3 C
e.printStackTrace (System.err);0 V- _7 k( K1 [3 E6 j6 j5 W# O
}6 T" x! `% d0 q& E5 u: ~
% |% L2 n4 k& t/ y
syncUpdateOrder ();9 _# R+ p+ a. O6 o
8 l9 F* Q- u# T4 g$ ]. x try {+ @4 B* X( U- | t( s: h
modelActions.createActionTo$message
! g+ J! a% q! I: u4 X (heat, new Selector (heat.getClass (), "updateLattice", false));! z5 W0 V: q7 e" `
} catch (Exception e) {
5 Z$ v! i) ^4 X3 X6 m7 _, ]6 r System.err.println("Exception updateLattice: " + e.getMessage ());
' F+ g g5 o& k' M2 t }: b6 t& E' l; D; B* g
, v# [; W2 r& Y. e
// Then we create a schedule that executes the
+ F+ f5 V( U; M& V6 x5 F0 u // modelActions. modelActions is an ActionGroup, by itself it/ Z: [& j# y8 R$ q/ P1 {9 n ]. z
// has no notion of time. In order to have it executed in
9 Q$ O4 h- S/ E+ @8 m7 |2 K! c- O# d // time, we create a Schedule that says to use the
7 _* _ d, U" c9 J! J3 ]# E // modelActions ActionGroup at particular times. This
. O. Y* W& s' ?! V6 b$ w* F7 u' D! w // schedule has a repeat interval of 1, it will loop every* p& z" Y+ P" `
// time step. The action is executed at time 0 relative to
$ \6 V# V% j3 }6 M2 l: ? // the beginning of the loop.0 _ k. d' N* _$ V- ?
' c6 N6 k( }; X) j; V% [* w# L6 Z
// This is a simple schedule, with only one action that is
5 n) q! h) {1 E // just repeated every time. See jmousetrap for more4 o0 [ ]; }0 P4 ~# n O2 r$ a
// complicated schedules.& H' z5 a |. p7 ?3 ^8 `
4 X1 F2 I2 t/ c2 ]1 v/ m% ~ @ U
modelSchedule = new ScheduleImpl (getZone (), 1);! g: X/ @5 e* M! O
modelSchedule.at$createAction (0, modelActions);- I0 V) y' ~7 R% h5 o
/ m: h. I; Z8 S3 @! l
return this;1 q w: O# I/ t) B
} |