HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ u0 @" I& b* m/ Q- V: L6 d+ i
9 m) T6 v1 z7 Z& ~7 n9 U
public Object buildActions () {
$ g% u" |. _4 @* `: N# ` super.buildActions();
' r1 V% L! o8 U( b: W* r0 D, Q 9 S$ o @2 Q% U o& V
// Create the list of simulation actions. We put these in
: |3 R7 O4 v5 x6 v // an action group, because we want these actions to be
1 r0 Q5 f# i4 ^9 O# x- L // executed in a specific order, but these steps should
3 i3 \1 U8 }" Y // take no (simulated) time. The M(foo) means "The message/ T$ \, r4 b* m1 ]; n7 \
// called <foo>". You can send a message To a particular
! J' E/ Q: r$ x' r" z! i5 W // object, or ForEach object in a collection.
! z! P7 e2 R: R [0 V5 i4 a
5 a( }3 E6 k% M+ { // Note we update the heatspace in two phases: first run
& g+ p0 h$ w7 R& J' N // diffusion, then run "updateWorld" to actually enact the
4 a: e. \ c- t7 X7 S! ~* j, { // changes the heatbugs have made. The ordering here is1 r: y9 s" z$ O$ `& u/ @
// significant!
a. O4 c1 U& x9 ~ ; m: r0 h& \) C% |
// Note also, that with the additional% ~/ k6 J3 |- E# o2 R v1 n# t9 V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! E" }) Y( h2 i' s7 q" E' s& ? // randomize the order in which the bugs actually run
' H( Y. j; T' H! O // their step rule. This has the effect of removing any E+ _- |# t* H" y9 @3 D0 \! X
// systematic bias in the iteration throught the heatbug
% ~8 O( m" Y+ a! k7 p6 `5 R& e // list from timestep to timestep9 r* b% v- N1 E9 d$ v0 v
: y/ h: |/ Q1 F' |; ?
// By default, all `createActionForEach' modelActions have
9 G" M% t' q. \) J // a default order of `Sequential', which means that the
/ `1 m) \( h0 l: Z- H$ E% O/ z3 Q // order of iteration through the `heatbugList' will be
8 e+ d5 f" B7 p // identical (assuming the list order is not changed$ u" i+ G& Q9 |
// indirectly by some other process).
& o- a/ d/ R5 ^
; E n' |- @1 J' n1 l! t) T modelActions = new ActionGroupImpl (getZone ());" H$ _; }9 X& G! |" b9 E( [. L
/ V! v, [0 C) C try {
# @/ ~: T0 Q/ B$ f4 t( D! d4 O modelActions.createActionTo$message
. x7 T' C8 h" U7 F) G1 D (heat, new Selector (heat.getClass (), "stepRule", false));
. ?4 F5 C0 H! k: c1 c4 P5 U$ T: k } catch (Exception e) {
# e" b2 h: v7 J System.err.println ("Exception stepRule: " + e.getMessage ());! Q6 f4 a0 f4 X/ E
}
; K6 R+ X+ K9 A4 ?6 O
' i/ a: ]4 }8 W1 y$ E try {0 a$ @. m4 }/ ^5 F0 I- v; Z
Heatbug proto = (Heatbug) heatbugList.get (0);
3 n) } V4 |' i. o2 ~; J( A Selector sel = ! v1 _, z: l3 z* ^' p
new Selector (proto.getClass (), "heatbugStep", false);! n8 f6 f$ o9 z2 W
actionForEach =2 @- B& u% [3 B- w) g% o. Y' K
modelActions.createFActionForEachHomogeneous$call' f; ?- I/ X& @6 A# [
(heatbugList,$ t6 r" v$ i0 @* {5 G* V7 Z
new FCallImpl (this, proto, sel,
( {" w/ W: |! ^$ U4 _0 E" H new FArgumentsImpl (this, sel)));9 g/ ~1 {' o! T3 G [$ H
} catch (Exception e) {
. \5 b7 y3 U3 e V: |* i e.printStackTrace (System.err);
3 b- O7 s. ?' Q* B }0 A4 p V6 U. s* k
. e- F" C: f5 e% U0 w3 q1 f
syncUpdateOrder ();" Z/ S7 ~ v5 @) R
" G! h z- e+ L! {6 ]' g try {
2 j* n9 M) a. \- d, `8 L modelActions.createActionTo$message
6 `8 o7 {% j. }7 S5 _/ N& ? (heat, new Selector (heat.getClass (), "updateLattice", false));
- @' [# v, g9 {; V3 B d } catch (Exception e) {! P4 I6 ?: T6 M! y: e
System.err.println("Exception updateLattice: " + e.getMessage ());
8 A7 O" W( }4 d8 \ }! c, @; V' ?# x( U
( F+ D# D5 V# T1 D+ w* F // Then we create a schedule that executes the: X3 d- c8 O( r' D ^
// modelActions. modelActions is an ActionGroup, by itself it" F7 L) H" \- m0 E& w( m4 g
// has no notion of time. In order to have it executed in3 }* {" I* b8 {# w7 P, a$ y; e
// time, we create a Schedule that says to use the
0 Y. X1 g3 A# N // modelActions ActionGroup at particular times. This
2 x% p( h/ ~$ B // schedule has a repeat interval of 1, it will loop every
/ I. P' S7 E7 B: D7 M; d // time step. The action is executed at time 0 relative to% Y# j5 k! |6 \& v+ k5 C7 T
// the beginning of the loop.
; Z% {0 e& p2 |0 i# K' y( h8 I' }
( x* d( h7 T! Y2 ?* O0 i // This is a simple schedule, with only one action that is# @1 u3 y. R: s# `
// just repeated every time. See jmousetrap for more+ `8 E. \- f$ A4 o p/ P4 k4 C4 F
// complicated schedules.& `" n) j# |& G/ B
% y( N: g. _: f, f- {- j. x& Q* V modelSchedule = new ScheduleImpl (getZone (), 1);. E" y J c8 m
modelSchedule.at$createAction (0, modelActions);* g W( c% ]+ ]# q) H7 {$ b) k! T
& e9 ?1 r) _! }6 e: Z2 M# B, x& a
return this;
: q8 w' ^) d) z } |