HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) r3 c" @! P* y. F2 H2 |$ |. v4 ]) D$ [* q3 w4 D
public Object buildActions () {
# O) u8 ~2 F: }; r super.buildActions();0 M; v6 H L% }! r4 F
% `9 M5 A; x5 E: x // Create the list of simulation actions. We put these in
( ?$ l5 D8 U& S8 A T1 a) _# j4 [ // an action group, because we want these actions to be' C, O7 R* O7 J, z. a
// executed in a specific order, but these steps should
5 X% `. j$ o! `( } _: q1 R // take no (simulated) time. The M(foo) means "The message3 `' x% A/ ^7 e' T4 t/ Q
// called <foo>". You can send a message To a particular
/ I k# z( b) o7 f // object, or ForEach object in a collection.- X* f4 u# Z+ w u! x
: S- w R" q1 I9 L( P
// Note we update the heatspace in two phases: first run2 ?1 ~; W" w& E2 [6 ~* ?
// diffusion, then run "updateWorld" to actually enact the
' N, ?2 A1 U+ o2 m$ W7 R Y // changes the heatbugs have made. The ordering here is
$ t% j2 [9 O5 }- Z // significant!
6 M D. l, W) k! o w C" k# O8 B) i, r, u+ ^
// Note also, that with the additional, W; x* g* L/ L9 S9 u1 R# X1 k
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, M+ Y4 W) f, T- `7 H& \* I8 ^ // randomize the order in which the bugs actually run2 e4 @+ ]) K0 m
// their step rule. This has the effect of removing any( ]2 Z& \6 n6 B: {
// systematic bias in the iteration throught the heatbug
2 \) f1 R1 \: l1 R; k. b // list from timestep to timestep: w- y1 g8 `4 e1 l$ O$ ]# o/ P% [
$ u2 A$ o, t) _! `2 ?. L // By default, all `createActionForEach' modelActions have! t) X! ^& R' Y3 i, ?
// a default order of `Sequential', which means that the4 Z; E3 h* ]$ |0 R7 w' G
// order of iteration through the `heatbugList' will be
, B* l* u5 y& F/ Z4 Q/ b // identical (assuming the list order is not changed
$ I0 ?3 q# n' T5 J) A1 U* W // indirectly by some other process).9 y8 e4 O, V+ ?. l
M* H2 N* @# Z0 A$ K' h% q+ l" e) h modelActions = new ActionGroupImpl (getZone ());5 f) M7 J0 O W; V |% w
" ^' M8 ?* p4 S3 N( ]! p try {
1 \# [) W% G4 s modelActions.createActionTo$message. c7 _, ?3 @' Z2 ]0 f
(heat, new Selector (heat.getClass (), "stepRule", false));. x8 w2 ?" T. X' K
} catch (Exception e) {- s; W" k/ B% `( p, [
System.err.println ("Exception stepRule: " + e.getMessage ());2 g9 F: m$ l. i4 o8 v9 S S
}
) a5 c$ s0 s% ~% X1 v! J+ T6 P: M& {* Q% G
try {3 ?' e. d6 X) R9 |0 |/ z
Heatbug proto = (Heatbug) heatbugList.get (0);
( }4 K" ^; B2 b2 A4 ~; a# X" H Selector sel = * ~: N( ~ x$ w! T& {% P" _' m) n
new Selector (proto.getClass (), "heatbugStep", false);7 ^! m8 p, U2 J% h3 V, X
actionForEach =
) }5 X3 x& c$ S6 a0 d D modelActions.createFActionForEachHomogeneous$call6 K7 [( O' c* I& Q2 x/ S4 N
(heatbugList,' j6 n4 v- p4 v) E+ u' u( r# L* C
new FCallImpl (this, proto, sel,. A8 a- l- b" q4 Q
new FArgumentsImpl (this, sel)));
# G% P0 \* ~) R' W' S) G } catch (Exception e) {
+ e9 [$ V6 w2 p6 W2 _ e.printStackTrace (System.err);
5 U% K! o& Y2 a+ j }. i/ x) e0 c) ^3 T
" i+ s7 g$ a% n1 Y n4 F' q
syncUpdateOrder ();/ G) M5 ]" X' K* n1 n
* [) `. i, Y# R% l try {
g4 \) j$ `! p4 H9 X modelActions.createActionTo$message ; V3 N! |8 f$ l* K
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 @1 Q6 ^ _/ r( ^! G8 ]0 y+ R } catch (Exception e) {
# a& C4 l/ c1 Q System.err.println("Exception updateLattice: " + e.getMessage ());# v1 p, {) n: `. e) |
}' L% I" v6 V, l" a
* h9 V+ n% @! P; V f' l1 i i. b: n // Then we create a schedule that executes the2 n6 ^1 S, U3 d8 L0 y7 f
// modelActions. modelActions is an ActionGroup, by itself it+ w& w7 { i/ W8 e3 N
// has no notion of time. In order to have it executed in
; o; w9 u2 I) m2 ]6 i, G: s // time, we create a Schedule that says to use the
$ R+ l. E# f( O& q# I) M // modelActions ActionGroup at particular times. This$ a/ k9 L; f. l( F0 o }; P
// schedule has a repeat interval of 1, it will loop every
r9 p4 u* q1 ` // time step. The action is executed at time 0 relative to) Q. }2 Q2 z( E% P( z( e
// the beginning of the loop.
+ H8 v5 ^/ l& q8 p. }0 Q8 i% c2 C I# e
// This is a simple schedule, with only one action that is
& i: S& b7 W. Q1 ? // just repeated every time. See jmousetrap for more! e; l, r. \! E0 F
// complicated schedules.4 x) d% m6 `; Z# d& h
& Q/ l, w$ |6 ]5 {0 H modelSchedule = new ScheduleImpl (getZone (), 1);$ B& f0 J+ W! v) Q* `+ N
modelSchedule.at$createAction (0, modelActions);
! Z* a; Y5 n( C( t" q' z. d/ {
4 I8 q" X: Q1 @- F6 k return this;
/ T! K2 R1 h8 M. X6 z } |