Difference between revisions of "Ns eval"

From AOLserver Wiki
Jump to navigation Jump to search
(imported from WiKit id 1306)
 
Line 18: Line 18:
  
 
: '''NOTE:''' This command is currently implemented in Tcl, in the source file nsd/init.tcl.
 
: '''NOTE:''' This command is currently implemented in Tcl, in the source file nsd/init.tcl.
 +
 +
: '''ns_eval''' is designed to work whether you pass your script as one argument or many arguments. In order to accomplish this, the arguments are passed through:
 +
<pre>uplevel 1 [eval concat $args]</pre>
 +
: which means that there are two rounds of '''concat''' behavior, unlike a straight '''eval'''.
  
 
'''EXAMPLES'''
 
'''EXAMPLES'''
Line 30: Line 34:
 
     # Get the list of pending scripts to be eval'd
 
     # Get the list of pending scripts to be eval'd
 
     ns_eval -pending
 
     ns_eval -pending
 +
 +
    # Unset an array variable in all interpreters.
 +
    ns_eval {{if {[info exists myGlobal]} {unset myGlobal}}}
 +
    # The code that ends up being evaluated in each interpeter is:
 +
    # if {[info exists myGlobal]} {unset myGlobal}   
  
 
'''SEE ALSO'''
 
'''SEE ALSO'''

Revision as of 20:37, 12 January 2006

Man page: http://aolserver.com/docs/tcl/ns_eval.html


NAME

ns_eval - Evaluate tcl in multiple interpreters

SYNOPSIS

ns_eval ?-sync? ?-pending? ?args?

DESCRIPTION

This command causes args to be sourced as a script in all Tcl interpreters for the current virtual server. Normally, the ns_eval is asynchronous and the script isn't immediately evaluated in the other interpreters until their next atalloc event. If the -sync option is specified, ns_eval blocks until all servers have executed the script.
The -pending flag, which cannot be specified with any other flags or args, returns a list of the scritps still waiting to be evaluated in the various interpreters.
NOTE: This command is currently implemented in Tcl, in the source file nsd/init.tcl.
ns_eval is designed to work whether you pass your script as one argument or many arguments. In order to accomplish this, the arguments are passed through:
uplevel 1 [eval concat $args]
which means that there are two rounds of concat behavior, unlike a straight eval.

EXAMPLES

   # Set a global variable accessible from all interpreters
   ns_eval set myGlobal 1
   # Create a proc accessible from all interpreters, and wait
   # for it to be define in all of them before returning
   ns_eval -sync proc doSomething {args} { # do something }
   # Get the list of pending scripts to be eval'd
   ns_eval -pending
   # Unset an array variable in all interpreters.
   ns_eval {{if {[info exists myGlobal]} {unset myGlobal}}}
   # The code that ends up being evaluated in each interpeter is:
   # if {[info exists myGlobal]} {unset myGlobal}    

SEE ALSO

ns_cleanup, ns_ictl, ns_init, ns_markfordelete, ns_reinit

Category Documentation - Category Core Tcl API