HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ V& G; S1 x W- d, V9 P* p4 W8 L# m. @% R$ [% f
public Object buildActions () {
0 B+ E3 Y4 W' c( Z+ V% M super.buildActions();6 a, m m& f! m% e
: ~8 c% _" A" e" y0 a! M" r6 P6 L
// Create the list of simulation actions. We put these in
0 e1 d- _+ h3 z5 u/ Y+ e // an action group, because we want these actions to be
! l: j+ w3 h1 B% s // executed in a specific order, but these steps should
) @: n' Y- z& b6 O4 Z2 ^& v3 m // take no (simulated) time. The M(foo) means "The message
0 Z$ f# T# T* T+ Y4 R+ G // called <foo>". You can send a message To a particular% j; L7 u( A3 R* a/ H2 e
// object, or ForEach object in a collection.
8 C( g9 h* r2 ~1 J: d r2 m . }3 r/ _) Q7 c8 n
// Note we update the heatspace in two phases: first run# N' B0 V) F9 [4 B
// diffusion, then run "updateWorld" to actually enact the
3 d8 V+ N2 P& w& ^% T // changes the heatbugs have made. The ordering here is
! p; d2 r/ S7 { // significant!- M% B' z6 a+ e7 o2 L8 f/ f6 V
3 B: U6 |0 W: A2 R' K0 l4 {- h
// Note also, that with the additional7 ^5 T( s/ U: q8 [( T% H: y
// `randomizeHeatbugUpdateOrder' Boolean flag we can- ?! A) B& s# f8 Y
// randomize the order in which the bugs actually run+ X5 u4 a& f( u" \; m
// their step rule. This has the effect of removing any. l0 d0 [+ S$ G$ V4 h
// systematic bias in the iteration throught the heatbug
3 e" W% Z) \- z: q4 e# @( W // list from timestep to timestep8 R& p9 I) V7 s
) H9 j6 Y) U- ?6 r
// By default, all `createActionForEach' modelActions have
4 V$ X. R" V# a, y // a default order of `Sequential', which means that the
6 e& J$ g$ J. y# ? // order of iteration through the `heatbugList' will be2 x7 {2 \. H/ W, M5 t5 M+ P! X& X
// identical (assuming the list order is not changed
1 S1 e1 [; e) U7 Z- d5 V M // indirectly by some other process).
+ u, G2 _. m" i! U, j- I 9 v3 V! @# }/ |
modelActions = new ActionGroupImpl (getZone ());
# Q+ {& u! u/ m( l4 s/ W0 a0 v' m" R) |. R2 X6 [' `- }
try {6 P3 T( C+ Y. F B, Q& b( a4 V; k
modelActions.createActionTo$message
7 p7 r5 N0 k( C6 f1 I (heat, new Selector (heat.getClass (), "stepRule", false));7 ?- M( v' _0 L* h8 t B
} catch (Exception e) {
! W( O5 J3 Y; Q* _ System.err.println ("Exception stepRule: " + e.getMessage ());
3 x* r8 [" G! R2 C+ p7 w s }
" j5 [9 F* j& q9 I/ n
& V! c6 d: G1 R2 ` try {) f$ G* ]9 O# Q# r0 O8 @
Heatbug proto = (Heatbug) heatbugList.get (0);: y8 d2 m. v- w& d2 i: r5 m7 J
Selector sel =
% M2 ~/ x1 n% N9 v* ^# m1 N" o new Selector (proto.getClass (), "heatbugStep", false);
7 G$ Q0 M, i+ ~% L actionForEach =/ D4 e1 {7 m% T; O2 X" O: j
modelActions.createFActionForEachHomogeneous$call
! T' H7 q% D- ?6 F2 p2 k (heatbugList, {5 h$ P; k7 }# g0 ^& N
new FCallImpl (this, proto, sel,
+ J3 {& O9 }- _9 C. ^4 U# K, Q# E8 [7 d new FArgumentsImpl (this, sel)));
1 j- N8 ]1 ` N } catch (Exception e) {
$ P% q) Y% Y: c p3 I e.printStackTrace (System.err);1 y* m0 i/ C( A! s# e
}
; J) X$ B+ C( ?. U- p5 i , M& u. y- K* D. L, ~2 p( T7 Z3 G
syncUpdateOrder ();
! \5 y" S# \8 ` q8 w( d+ e# |9 D: k
% D0 h' Y; ^- @8 f ? try {
% n( x% v/ \' j& L) R: O modelActions.createActionTo$message
: X7 Y4 x7 r8 I5 [6 J" z (heat, new Selector (heat.getClass (), "updateLattice", false));/ Y; h* N% L6 j# S; k, E. W, L) H
} catch (Exception e) {
) H$ C3 t- a5 K System.err.println("Exception updateLattice: " + e.getMessage ());. \5 R0 C( v% o, i6 V& i) g
}0 M- E5 C7 Z6 D- J3 S U
0 |/ W9 P4 W3 u, ^5 b6 H$ O
// Then we create a schedule that executes the
) u1 j6 W5 n) k( J* K // modelActions. modelActions is an ActionGroup, by itself it, X. A# i( r" D1 v7 F
// has no notion of time. In order to have it executed in3 p( q$ w8 q$ B, c
// time, we create a Schedule that says to use the
8 t7 b6 o; x* J // modelActions ActionGroup at particular times. This
0 N& x, _, q( W# |7 I( Z9 K: k6 m8 h // schedule has a repeat interval of 1, it will loop every
) F# s6 ^$ Z; @( n: U // time step. The action is executed at time 0 relative to; B9 K# S" ^2 ~# I
// the beginning of the loop.) }" [% _+ _2 y! `, w, V( ^9 _
, V; P8 m9 C8 F& N( Q- |7 U2 v // This is a simple schedule, with only one action that is" {3 H: r e( ^& g7 S# Y3 P6 [6 b
// just repeated every time. See jmousetrap for more: T" \, ]& L* O8 v' b
// complicated schedules.
8 G/ H' `& u$ t- r7 _3 d: r # D- N# f- r S- U6 {7 ^, E
modelSchedule = new ScheduleImpl (getZone (), 1);5 s2 P0 D2 w% f8 W
modelSchedule.at$createAction (0, modelActions);
. C' w5 i: L0 }& r$ S * u& a# U4 K0 k3 l, o8 m. z- B
return this;/ J8 c6 n# v. J! N3 X
} |