User Tools

Site Tools



This shows you the differences between two versions of the page.

Link to this comparison view

bless [2006/07/25 21:22] (current)
Line 1: Line 1:
 +Ordinarily, the local variables of an [[atomic scope]] are only visible to that
 +atomic scope, and cannot be used outside. ​ Sometimes you need to be able to
 +access an atomic scope'​s local variables within another atomic scope. ​ Two
 +atomic scopes can cooperate at runtime to accomplish this if the enclosing
 +scope does [[wait]] and the enclosed scope does [[bless]].
 +Each [[bless]] attaches itsself to the oldest unmatched [[wait]]. ​ If you
 +have [[wait]]s pending, and then do a [[wait]]+[[bless]] combo, the results
 +may be disasterous,​ or hilarious, depending on your mood.
 +Presently [[bless]] ignores its arguments, but this will not always be the 
 +case, so you should not supply any arguments for forwards compatability.
 +This is best demonstrated with an example:
 + alias uh 
 + {
 + ^local blahblah
 + wait for {
 + ^userhost $* -cmd {
 + bless
 + push blahblah $3@$4
 + }
 + }
 + return $blahblah
 + }
 +To share variables between aliases, use the "​CrazyEddy technique":​
 + alias one {
 + bless
 + @ :hi = 'this is a test'
 + }
 + alias two {
 + @ :hi = 'this is the first value'
 + one
 + echo $hi
 + wait for { one }
 + echo $hi
 + }
 +This outputs 'this is the first value' and 'this is a test'​. ​ In the first
 +case, the [[bless]] has no effect because nobody is [[wait]]ing for it.  In
 +the second case, alias one can change the local variable in alias two because
 +alias two is [[wait]]ing for it.
 +The [[bless]] command first appeared in EPIC4pre0.009.
 +#$EPIC: bless.txt,v 1.3 2006/07/17 20:11:14 sthalik Exp $
bless.txt ยท Last modified: 2006/07/25 21:22 (external edit)