On 7/3/06, Yakov Lerner <[EMAIL PROTECTED]> wrote:
On 7/3/06, Yakov Lerner <[EMAIL PROTECTED]> wrote:
> On 6/30/06, Hari Krishna Dara <[EMAIL PROTECTED]> wrote:
> > ... The Funcref obtained via function('s:T') can't be
> > called from outside the script ... [unexpectedly]
>
> I agree, Hari. I'd expect funcref function('s:T') to be callable
> outside of the script, too.
To make myself more clear. I expect g:Xxx() to be callable
from global scope of from another script in this example:
" --- scritp x.vim
function! s:XXX()
echo "func XXX"
endfunction
let g:Xxx=function('s:XXX')
Yakov
The problem with this is that you can no longer have private object
function refs.
I'd be interested to hear from Bram about what the intent was here.
I think I can see some method in the maddness.
1) let ref = function('s:XXX')
This mains the standard scope rules for the func ref, and so it
stays local even if the variable holding it is global. I can image
situations where this could be useful.
2) let ref = function('<SNR>66_XXX')
This forces the function to be available globally because it is
explicitely defined, and there is little chance of mistakes about
that.
3) function obj.funcref() dict
Again, I think the intent for having the object function in the global
scope is unknown (to me at least). I think it left global because you
don't really need specific scoping for it, as when it is used, it
*should* be used via the object name, which is scoped by the user.
function s:obj.funcref() dict
Hari, can you give an example of why function('s:T') should be
globally scoped? I can't see a need for it, given all the
possibilites for obtaining a ref.