HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% X7 F) a' ?9 z/ m! c* W! D% @1 d( H: @- y
public Object buildActions () {* t& {5 P) B4 a6 i) m1 P& \! H
super.buildActions();/ g I/ r, l/ u5 k% y+ W, i: a1 a
& {$ `% f( x9 x% E5 e! ~5 x // Create the list of simulation actions. We put these in
# N8 @ q- P7 @$ f // an action group, because we want these actions to be9 B7 m! N# w8 k" c$ J
// executed in a specific order, but these steps should! K8 X+ z& J8 B3 i+ p5 p
// take no (simulated) time. The M(foo) means "The message/ I5 z1 W7 h, k) J T7 ~
// called <foo>". You can send a message To a particular2 n" ]; E# n3 D' P# j- n6 K, f# X
// object, or ForEach object in a collection.. W$ r; y5 i. a, x
J' _3 L' G6 z // Note we update the heatspace in two phases: first run0 D9 I: X! z* r( N7 k2 g& e' g
// diffusion, then run "updateWorld" to actually enact the. U! a+ @+ w3 ]& U
// changes the heatbugs have made. The ordering here is
) P7 q; I# G6 y2 B b // significant!. G" p/ B. F% H# ?; [( |% ~
0 N( a3 U7 s& D9 j0 i+ k: S
// Note also, that with the additional# P9 b- {2 C' r* z* n5 g: d, l
// `randomizeHeatbugUpdateOrder' Boolean flag we can- h9 C3 c& i' Y5 ]0 \6 v
// randomize the order in which the bugs actually run
]6 q& `4 r. @% e) X9 L/ }8 L5 W // their step rule. This has the effect of removing any
: Q# Q# S8 m: d- `4 V2 m // systematic bias in the iteration throught the heatbug# ?& X, [: W* `$ B$ q. H7 e E9 b
// list from timestep to timestep
* W: \: e- C3 Y* R/ Q
' O" E5 T+ o2 N* J. M // By default, all `createActionForEach' modelActions have: b# G- ^/ B4 }7 |
// a default order of `Sequential', which means that the
9 H# L8 {8 ~" E; K/ B // order of iteration through the `heatbugList' will be/ q+ G$ @1 T* p5 b8 t9 @
// identical (assuming the list order is not changed$ j0 D6 G$ `. b0 R& P
// indirectly by some other process).
e5 `! E+ z3 i9 h
7 I( S& I3 Y+ }2 A6 Q- u5 a' Y* A& M modelActions = new ActionGroupImpl (getZone ());6 k6 d/ [/ Y/ V8 R3 w' q
, _; w: r, ?# r: I5 q try {' Z; l" ~6 e; T3 X8 _- o
modelActions.createActionTo$message* ^, @5 s+ w$ {
(heat, new Selector (heat.getClass (), "stepRule", false));+ b- q" ]3 l6 v
} catch (Exception e) {, l& ^; x( f% [& }$ b: ?3 W
System.err.println ("Exception stepRule: " + e.getMessage ());' x& \" W/ l1 ^# q0 l+ g" U$ `
}
4 x9 [; q1 k6 P& m: @
0 L' p; Y3 i( b# ~3 | try {( C* p: c1 G" C/ G6 o
Heatbug proto = (Heatbug) heatbugList.get (0);/ {4 _+ D) e7 h- Y( r% s, ?/ \
Selector sel =
; j; C' O0 m, w. }" X; O new Selector (proto.getClass (), "heatbugStep", false);6 E5 n. G) j* w; `8 @
actionForEach =2 u' {- v. H* P% B7 W
modelActions.createFActionForEachHomogeneous$call
1 P. p4 M) g7 O5 \ ]4 ^4 H (heatbugList,
7 \2 Z, Q3 {, ^) ? new FCallImpl (this, proto, sel,$ i4 B( W2 f4 r. g+ a5 @$ u
new FArgumentsImpl (this, sel)));
; a" f5 ]3 Q3 G; }# c- }) T# I& H5 W7 f2 S } catch (Exception e) {
! m4 _5 Y w* ~6 ~0 N e.printStackTrace (System.err);
, v7 L; X" l9 W" O! d* b- [( i, C }& A7 G" w, S" \% x- U4 Y9 _- }
9 \9 S% H4 Y2 s+ j- k1 B syncUpdateOrder ();5 M8 C# s& H5 k6 x1 a ]
: \8 ~* B' C7 @0 V* Y, B( D+ d9 H try {
: g7 e+ q* h2 b# M modelActions.createActionTo$message
- G# \2 o! u2 K. K5 M3 ] (heat, new Selector (heat.getClass (), "updateLattice", false));, l( _' O! R. Y8 _7 F1 F+ ?- d, d
} catch (Exception e) {
+ U( L4 d7 K, `8 R3 \ System.err.println("Exception updateLattice: " + e.getMessage ());: @1 p, d- c, } V- L3 Q m# K
}8 U# i3 Q/ W0 w" I% u' S Y0 _6 U
: C% b) W8 Q ~* K: L
// Then we create a schedule that executes the9 ]7 g0 z) m: x- D
// modelActions. modelActions is an ActionGroup, by itself it/ Q. E- z% h5 Z: n! n
// has no notion of time. In order to have it executed in) k$ b+ L. z& ?0 ^& D: H; T
// time, we create a Schedule that says to use the
8 {! z3 x; o0 v- G% C, f // modelActions ActionGroup at particular times. This
1 S9 ]" T$ h. g1 a0 ^) B7 X$ Z; `- m9 q // schedule has a repeat interval of 1, it will loop every4 ?" c. L6 p- ^; J( b
// time step. The action is executed at time 0 relative to
9 E, `' ^: ~5 { // the beginning of the loop.
K# t0 J: l* H4 ^3 A* y( I- A7 k, A8 s1 J6 a
// This is a simple schedule, with only one action that is, B( [) k+ @ h" Z' E3 ~& @" k, f
// just repeated every time. See jmousetrap for more8 n0 ]4 E$ X @, Y2 M
// complicated schedules.
/ O" K5 e" C9 l2 L6 u( n $ l7 T5 \% V7 e/ {% J
modelSchedule = new ScheduleImpl (getZone (), 1);
3 D$ @) g1 [! ]3 h$ f2 ]6 F modelSchedule.at$createAction (0, modelActions);, X* f1 U) C/ D+ ^( s L4 ]. Z
1 G. {$ K l! b4 W9 B return this;' u! T3 p6 C; r6 N7 m& I- [
} |