Here are a couple workarounds:

1) This is a little verbose, but you could include a flag for each global,
like so

globals [
  first-param
  first-param-set?
  second-param
  second-param-set?
]


then in `setup-globals`, you'd do:

to setup-globals
  if first-param-set? != 0 [ set first-param 13 ]
  if second-param-set? != 0 [ set second-param 72 ]
end


In BS, you can then specify which globals you want to override by setting
those flags, eg:

set first-param 0
set first-param-set? true

or

["first-param" [0 1 10]]
["first-param-set?" true]


2) Less verbose, but perhaps a little dirtier, and less flexible. Have a
global called `initialized-globals` or something. Then make the following
procedure:

to initialize-global [ global-name value ]
  if not is-list? initialized-globals [ set initialized-globals [] ]

  if not member? global-name initialized-globals [
    run (word "set " global-name " " value)
    set initialized-globals lput global-name initialized-globals
  ]
end


Then, in `setup-globals` and BS, do

initialize-global "some-param" 5


to initialize each global. `initialize-global` will only set each global
once.

This has a couple limitations. First, `initialize-global` has to be tweaked
if you need to set globals to values who's string representation doesn't
evaluate to the value itself (I think this only arises with extensions).
Second, it's a little awkward when doing parameter varying in BS. I suppose
you could do it as follows:

["first-param" [0 1 10]]

["second-param" [-5 1 5]]


and then in the BS setup, do:

set initialized-globals ["first-param" "second-param"]

or via

initialize-global "first-param" first-param
...

Hope this helps as a workaround!
Bryan

PS-

I'll cross-post this to the related github issue:
https://github.com/NetLogo/NetLogo/issues/179

On Fri, Oct 17, 2014 at 4:19 PM, Alan Isaac <[email protected]> wrote:

> There is no good workaround.  The developers have not suggested a
> workaround. This is a widely recognized problem. I personally do not see
> how it will be adequately addressed unless initialization of non-interface
> globals is changed.  I would love to hear how the developers are thinking
> about this problem, which poses very real problems for serious NetLogo
> users.
>
> My recommendation would be to plan a transition.  Immediately, introduce a
> new keyword for the declarations section, allowing specification of the
> default value for non-interface globals. (E.g., `__global-default`.)
> Ideally, this would immediately be supported by the introduction of a new
> value (e.g., `undefined`).  Users who want this functionality now would be
> able to include the declaration
>
>     __global-default undefined
>
> In a future version, this would become the default behavior.
>
> I plead that the developers take this design flaw seriously and that it
> not be passed on to Tortoise!
>
> Alan
>
>  --
> You received this message because you are subscribed to the Google Groups
> "netlogo-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"netlogo-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to