HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ { A5 C) k/ f" P( h4 w& {& P* c) e5 K: E
public Object buildActions () {& b$ f; x6 i. j# q5 _# G. i! m8 P( ^
super.buildActions();
; ~ C! ^: B- {# M2 R) t1 k* }
3 l1 m5 L r9 v8 F // Create the list of simulation actions. We put these in
$ G4 K! Y( n7 C7 _$ O; m // an action group, because we want these actions to be
! J$ }3 f. I. K: d- {& M6 e // executed in a specific order, but these steps should
' Z% E9 Z a4 e. ~. }- B // take no (simulated) time. The M(foo) means "The message' Q8 \* y/ {: r$ o- r0 {6 h6 I8 u
// called <foo>". You can send a message To a particular& B5 B. }3 m6 X& k$ t# a5 P7 w* g' }
// object, or ForEach object in a collection.# _9 G9 |2 {0 q, v
2 K ~) Q1 ~9 u" A7 Q: r7 o9 s // Note we update the heatspace in two phases: first run7 ?3 S3 F4 S9 C! h1 f
// diffusion, then run "updateWorld" to actually enact the
R) e5 O& Z# E: z- v1 } // changes the heatbugs have made. The ordering here is
9 {; ~; [ N9 z& d: n- R. w/ g // significant!
- V) Y m. e! f7 n4 q8 I5 g 4 w* y7 J! G; L8 B( Q, f, M. j4 w
// Note also, that with the additional
' m- ]/ D9 k# L( [+ L* C // `randomizeHeatbugUpdateOrder' Boolean flag we can
! r' [% a* v. t* I# P, E5 G: G7 z // randomize the order in which the bugs actually run
+ `0 J0 V) L! ]& ] // their step rule. This has the effect of removing any
^$ |8 n3 ^; D/ k8 a! c // systematic bias in the iteration throught the heatbug2 \8 e) L3 Q5 G3 ~, ~
// list from timestep to timestep
3 C( j" Q6 i* [& g* d$ M& {2 p' V 3 Y6 M9 Y3 @/ c# N5 y! a1 Y
// By default, all `createActionForEach' modelActions have% y' y6 e% {; O. U( p
// a default order of `Sequential', which means that the! ]9 L/ g" D2 ^$ W3 R
// order of iteration through the `heatbugList' will be* q! V- U! q+ V7 u
// identical (assuming the list order is not changed
0 T, C2 @) O' }1 i // indirectly by some other process)., L8 a, z2 ]$ k9 u3 O6 y0 d
% O A0 | q+ ~# u* Z) ~# G" E
modelActions = new ActionGroupImpl (getZone ());
0 C. x/ M& Y n6 L6 {$ S3 N
& S/ c8 q' W5 w2 q$ R7 k4 O8 w try {
& f/ Y% q) V' T' Y modelActions.createActionTo$message
( V( ~8 R3 S! V" q7 v& V' N (heat, new Selector (heat.getClass (), "stepRule", false));" r& W4 G Y% ]2 h
} catch (Exception e) {
$ f0 u+ a, u0 v" P* s. P System.err.println ("Exception stepRule: " + e.getMessage ());
( ~. N" Z8 @' r [3 Z }
4 o8 v2 q% K9 ? x
! G7 g! L; |, m: s5 W$ L/ E try {/ L1 K. l% x" f. I4 v9 Z. E' K, i
Heatbug proto = (Heatbug) heatbugList.get (0);- o; b+ i* c# `' k0 D# ]& x
Selector sel =
0 g) d' k6 w( t" G new Selector (proto.getClass (), "heatbugStep", false);
; B/ d3 d: c1 p: w. W; a actionForEach =
# i8 P. }" c* p2 z! I9 r: u# z7 v modelActions.createFActionForEachHomogeneous$call
1 g+ ?7 a4 H- H5 b, e (heatbugList,
. E5 g' f X4 U9 j. J% } new FCallImpl (this, proto, sel,2 P& p; ~- K' c9 Y
new FArgumentsImpl (this, sel)));
* I! Y2 ]2 d! Y } catch (Exception e) {
7 v% n. R4 q/ x; d. z9 e* W7 S e.printStackTrace (System.err);
- C" @; M$ L; q/ i6 d }
! z* D% s( L5 ?% J# K+ b; V4 m + W( |3 t& ]' K5 a' q+ r, c+ b
syncUpdateOrder (); n" ~& X8 s9 z3 C, u* I
. K/ [% S2 W. [% z
try {/ [* y" r, O4 d; Y& V& ^7 s% n
modelActions.createActionTo$message ' S1 f0 Z1 B: d) v
(heat, new Selector (heat.getClass (), "updateLattice", false));9 k: j# ^" g: |9 P1 w5 r
} catch (Exception e) {6 o* F ], r3 q
System.err.println("Exception updateLattice: " + e.getMessage ());
6 I& Y9 I6 @1 u( r$ ]( K/ [ }
6 S1 c* j/ n) k# g 7 `( F; N. T; r
// Then we create a schedule that executes the# ]: B& ?# ]( r& Z! u
// modelActions. modelActions is an ActionGroup, by itself it ^6 d6 I' p4 D2 w K# B
// has no notion of time. In order to have it executed in0 b) u5 ~* a+ n) H% {
// time, we create a Schedule that says to use the
; z4 z: R5 X9 z7 v* c( | // modelActions ActionGroup at particular times. This
6 e5 c3 s6 J6 M+ s% j // schedule has a repeat interval of 1, it will loop every% q4 O/ J2 s. E m1 d6 }2 o+ Q
// time step. The action is executed at time 0 relative to
, V, u$ j# y+ O9 [. K( t // the beginning of the loop.6 ^- f9 Z0 r0 c( R% n$ e5 I3 W
, B$ p7 h V" b# O \, [" ^ // This is a simple schedule, with only one action that is* \1 x. H2 U. ^# p$ y$ r* l
// just repeated every time. See jmousetrap for more. B& }+ x9 ~5 f9 z- N" r
// complicated schedules.. ]7 t4 g$ R5 F, K( Y9 `% _
+ m* m( S/ o* r! F modelSchedule = new ScheduleImpl (getZone (), 1);- ^& J" v9 q) [2 v5 q- B
modelSchedule.at$createAction (0, modelActions);
/ v5 j: g. q: T/ X o# @ ! _% e* B$ J* Z7 C: ]4 Z0 H
return this;4 V& r$ h- U3 j. [ j f! s
} |