HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 K1 C) Z0 T4 w
) d2 d* K; I8 Y( _. |7 g
public Object buildActions () {( Z/ v8 g: q4 n y& E2 v3 g7 q
super.buildActions();
+ p+ t& y' m* F" ^, I! I . | f; ]$ w o" J, T2 F6 O
// Create the list of simulation actions. We put these in
! N* }- f2 B) n. Z // an action group, because we want these actions to be$ E$ G2 ?1 f5 N" |
// executed in a specific order, but these steps should
3 V$ `( F0 D( R7 h2 d1 \ // take no (simulated) time. The M(foo) means "The message
- t" P k( N9 u7 q6 X // called <foo>". You can send a message To a particular
/ e0 o5 f! m# ~' D6 K: N // object, or ForEach object in a collection.
0 ?5 { s- {5 h( `- l0 j4 ~/ r
4 t; E8 @8 A2 e // Note we update the heatspace in two phases: first run
3 X% H# w& ^& A# j; f // diffusion, then run "updateWorld" to actually enact the
0 a+ G' |- _' a; C( W* D // changes the heatbugs have made. The ordering here is
2 E8 f3 u# `4 i- t; q8 P // significant!% S7 S/ V4 r, ]. ] X2 k
. c" J/ F% A6 ?5 {0 ~+ h // Note also, that with the additional
, j5 \" P- ~- r" {6 Q3 Y/ ?; C& Y // `randomizeHeatbugUpdateOrder' Boolean flag we can. W/ c( J: ?1 j$ Z* L
// randomize the order in which the bugs actually run9 f- y, x2 h: O9 o* a& w& K
// their step rule. This has the effect of removing any
% o1 G" N* F6 p // systematic bias in the iteration throught the heatbug$ Z5 u: E# J T1 [, d, t# i
// list from timestep to timestep+ i3 B; \" D; W, Z3 B) ^) t( m
6 G0 Y- ~6 \5 e- D
// By default, all `createActionForEach' modelActions have, ^; F/ T2 {# N, {
// a default order of `Sequential', which means that the
, A; r2 q. w; V+ z5 m* G8 L // order of iteration through the `heatbugList' will be: o& W9 g0 r. a2 e. k- c' o
// identical (assuming the list order is not changed
/ s$ V2 t% J5 m) m6 m# r/ u7 Y // indirectly by some other process).* @. g u6 U: `) b( Q" H7 B, p# W
! e; d8 b$ X- P. B modelActions = new ActionGroupImpl (getZone ());
/ d7 @) l9 @- z& r9 m& h- f C8 L1 i% N4 P9 }9 |
try {* L, v/ v2 v# m. F5 D
modelActions.createActionTo$message
' ~% e+ K3 y+ M( a1 U (heat, new Selector (heat.getClass (), "stepRule", false));
+ G! X6 D9 y! _8 u4 @ } catch (Exception e) {5 i# E3 H5 N0 }1 d5 A
System.err.println ("Exception stepRule: " + e.getMessage ());' o2 ^. L( c" M3 ]/ m( d
} x/ P2 w8 b+ N% @4 C$ c0 _
: i$ W6 X. |) t. {1 _
try {
' K' B% C3 [& b* E; ^5 k. k- g Heatbug proto = (Heatbug) heatbugList.get (0);8 |2 n. M$ \% E; j) a+ q3 |
Selector sel = 7 I7 M; ]: X0 ~8 v, C
new Selector (proto.getClass (), "heatbugStep", false);: K, I$ w3 e" C$ L' {7 H
actionForEach =1 y3 Y2 l& u7 C) G S) |( `4 J9 q3 N
modelActions.createFActionForEachHomogeneous$call
$ w! r4 M4 ~8 M8 p) @. ^- T (heatbugList,
# @2 L" B" L2 D$ D4 ~6 J& s new FCallImpl (this, proto, sel,. [5 X% J+ y9 L( M1 ^+ S
new FArgumentsImpl (this, sel)));; X. j: s% R4 _# o8 o+ I
} catch (Exception e) {% @; p" K' w. Z6 r1 p1 j
e.printStackTrace (System.err);# R; v/ s4 K* T# l+ R
}
, y7 }" Q2 P% W# A
, @6 s% t, s @ syncUpdateOrder ();0 \9 R* }2 h/ d( g2 Q5 A. |
, o* Z. S9 _4 V0 T1 l try {* _3 R- X2 T8 b! m8 d( H( k
modelActions.createActionTo$message 9 U2 I. d% Y- U" S' D! i d% ~# b
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 g, Z9 J8 b) A3 s% j" ] } catch (Exception e) {- F8 F- [2 f1 [9 Y. c' Q0 E4 P/ A
System.err.println("Exception updateLattice: " + e.getMessage ());
8 f: T" p" M# E+ {! K8 N }
/ }$ t7 g4 _! v( _# p7 H: h# I" j - g6 d4 s* j7 E$ l* P4 X7 s
// Then we create a schedule that executes the
6 K( `( q8 S7 G& p$ q5 s' i7 V // modelActions. modelActions is an ActionGroup, by itself it, L$ ^% k# i* H' V
// has no notion of time. In order to have it executed in; r4 V- C# Q8 ]2 W) B
// time, we create a Schedule that says to use the# E" V6 T" ], i6 L- f ?$ l
// modelActions ActionGroup at particular times. This* o& F3 P ^# k! j2 g6 N
// schedule has a repeat interval of 1, it will loop every# K/ o+ X9 s8 R3 F, _
// time step. The action is executed at time 0 relative to$ k( X& p# M3 e1 O; k. N
// the beginning of the loop. p: R. y2 Z6 |" w3 J8 Z# ?) f
9 E, X* {2 x* Y4 L: A
// This is a simple schedule, with only one action that is6 W: [# p3 V7 V c A! {& o
// just repeated every time. See jmousetrap for more! ?$ G5 E! j/ J+ p, f; f
// complicated schedules. V! ^ J% t. d; q' O
8 b$ T* L- e2 o$ r5 i+ T modelSchedule = new ScheduleImpl (getZone (), 1);0 W( r) i0 L" i) S P2 ?' E
modelSchedule.at$createAction (0, modelActions);
( o. |3 c+ E- {# N8 Y3 s& u
$ \, E D3 i, g7 U return this;
9 B& {7 c: S7 s; M* |8 |; { } |