HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 q' [7 \! P# v7 E6 J' v0 U/ r' ~
5 P, O5 i p' Z' T1 J8 k
public Object buildActions () {
! \/ O- F% [ O: z. w6 l super.buildActions();
. N) ~+ o- W1 r( \( J
8 Q4 Q1 V8 s: ~5 @ // Create the list of simulation actions. We put these in
3 Z1 `& H' W1 @ // an action group, because we want these actions to be
! m K9 e6 m& L; I' j! { // executed in a specific order, but these steps should# r, c2 R d d5 u- j
// take no (simulated) time. The M(foo) means "The message& t" D9 ]1 J; e$ |9 V
// called <foo>". You can send a message To a particular
5 O" @. V! k" K, K1 z7 p% e // object, or ForEach object in a collection.
2 {5 {4 b! ]; ~- g, @6 Q
/ v# |% B! _0 ? // Note we update the heatspace in two phases: first run
+ j9 [. u5 d& L5 G // diffusion, then run "updateWorld" to actually enact the
5 n. b9 z. s' a // changes the heatbugs have made. The ordering here is2 j3 z2 @, E0 ^5 z i6 X* _
// significant!
# U0 W. h M! v9 Y. X+ }$ G " Z0 {4 I3 i& u4 `1 r
// Note also, that with the additional
]3 p* g5 s$ N4 y" N! m, e // `randomizeHeatbugUpdateOrder' Boolean flag we can
! L0 B3 x" u& m+ S% x) ? // randomize the order in which the bugs actually run/ Z) G6 P" J% B* I( q' H
// their step rule. This has the effect of removing any
) I6 {. G- v8 n* ]9 w$ d // systematic bias in the iteration throught the heatbug5 K* D: B5 Y8 @7 v7 e+ R x: ]
// list from timestep to timestep# `$ D* ] |) T& ^
+ N v3 f) k8 B
// By default, all `createActionForEach' modelActions have$ J9 v/ J/ x% N8 \
// a default order of `Sequential', which means that the
# y1 }: y% k1 @* F6 n+ L" J // order of iteration through the `heatbugList' will be
6 v1 ?0 U; G2 q" p- i // identical (assuming the list order is not changed; ~$ y [$ j1 l
// indirectly by some other process).1 A% E5 Y* Q/ {1 w
3 N$ F3 F' b. t4 [# R modelActions = new ActionGroupImpl (getZone ());; e4 X, S* q {7 R% ~) A
( k. u6 l. l+ h+ B1 z
try {* I1 [+ g n* k1 D/ \9 @, \
modelActions.createActionTo$message
* F8 O8 l! B0 k# c (heat, new Selector (heat.getClass (), "stepRule", false));: O& Y( {1 r, w
} catch (Exception e) {2 U4 l/ ]* k" H, a
System.err.println ("Exception stepRule: " + e.getMessage ());: n1 T2 B8 b0 u" g9 q
} Z0 _: c8 _: k
9 K8 a' `/ u" `: S
try {
4 R8 E: G! W6 Q2 L Heatbug proto = (Heatbug) heatbugList.get (0);- _, o/ F1 i4 n" V8 v
Selector sel = + P; `& U) |* }; v- \. d; L+ D) k
new Selector (proto.getClass (), "heatbugStep", false);
X* M+ o8 ?% D/ [3 z) W9 P/ _ actionForEach =7 I) S& Z1 Q- K2 f& s! B
modelActions.createFActionForEachHomogeneous$call) e$ f1 D; }6 X6 c# j
(heatbugList,3 h1 U( J" B6 L0 j& ]4 m% N# ]7 V; F; F
new FCallImpl (this, proto, sel,3 I4 A, j& p) ^( r
new FArgumentsImpl (this, sel)));: k, V4 w" C6 l# g( }
} catch (Exception e) {: O" _$ v f( N! V. ^( Z
e.printStackTrace (System.err);8 s0 }7 ]6 [% Z
}9 o4 u9 [: z0 h5 \5 d
2 }1 Y; z. O! P% B8 d' L syncUpdateOrder ();
; u0 k7 K2 c( ^' \, y! ~% W( M( x, Q, j6 N* L* Z! z
try {
) B8 a5 l! Q' R% |3 C6 b( k. ^ modelActions.createActionTo$message 5 e& j! a9 p/ B7 l/ c6 X: T
(heat, new Selector (heat.getClass (), "updateLattice", false));- @2 k! [% q4 s% V9 `" P& v6 t5 O
} catch (Exception e) {
, i S& ]$ _, _2 F h! W6 m System.err.println("Exception updateLattice: " + e.getMessage ());1 r+ k8 E/ s( z2 ?, R3 x- r7 p) U
}( i2 o+ [) @5 M* u+ J, T
' [+ F0 v+ x8 s' a5 g! s9 m" ?" N
// Then we create a schedule that executes the1 b- f% \+ `" t" n) R
// modelActions. modelActions is an ActionGroup, by itself it
" }( ?: S7 L8 t5 W. f+ c$ g( I2 X // has no notion of time. In order to have it executed in
+ x- L- U. H! X // time, we create a Schedule that says to use the
) I8 }- W/ X/ V' p" f6 z // modelActions ActionGroup at particular times. This
7 b' N! {6 W# I% \8 x! d E // schedule has a repeat interval of 1, it will loop every T( P8 Y) J, C8 ?# F
// time step. The action is executed at time 0 relative to
8 s1 c* L: E" J+ X/ q8 A // the beginning of the loop.& G7 {) s- q! l5 u; j5 G
$ h! V8 H+ M6 P. S1 ^) ~! j0 ]
// This is a simple schedule, with only one action that is
2 |, Y4 }4 v9 T! N9 ^) f7 O // just repeated every time. See jmousetrap for more/ H/ u }; f2 X1 d1 _
// complicated schedules.
& o1 S- v7 _4 ^$ D) g4 e& U2 m
4 E! I) p f5 R; p+ j, k, A modelSchedule = new ScheduleImpl (getZone (), 1);
; t Q* C$ v- j# x u" ?, M7 c modelSchedule.at$createAction (0, modelActions);
; d) V: U- k y5 K" {! `
' ~: i; N2 {5 z return this;
0 T$ L& x0 \; X; |+ X } |