My solution right now is a macro

macro isDefined(x)
   return :(defined = true; try eval($x); catch e; defined =
isa(e,UndefVarError); end; defined)
end

I find this to be very clunky, but it works for my limited test cases.

> All compile-time undefined bindings become a runtime lookup from the
> enclosing (i.e. module) scope. The undefined error means that this lookup
> failed.

If that is so, what is the function I can call to determine whether my
variable is in scope? `isdefined` is definitely _not_ that function. How do
I need to call that function from Julia? Your explanation is not a solution
to my problem.



On Wed, Jul 20, 2016 at 12:01 AM, Yichao Yu <yyc1...@gmail.com> wrote:

> On Tue, Jul 19, 2016 at 11:54 PM, Isaiah Norton <isaiah.nor...@gmail.com>
> wrote:
> > Creating variables dynamically at local scope is not possible (if you are
> > calling `eval` inside a function: it does not work like that!)
> >
> >> Since the runtime can determine that the local variable is undefined as
> >> evidenced by an appropriate error
> >
> >
> > All compile-time undefined bindings become a runtime lookup from the
> > enclosing (i.e. module) scope. The undefined error means that this lookup
> > failed.
>
> We do have local only variables that can be undefined.
>
> >
> >
> > On Tue, Jul 19, 2016 at 10:43 PM, Christopher Rinderspacher
> > <crind...@gmail.com> wrote:
> >>
> >> I, too, would like to be able to check whether local variables are
> >> defined. In my case, I am parsing a file that doesn't allow
> redefinition of
> >> a field. The natural way to do this is to check whether I've previously
> >> assigned a variable with the content.
> >>
> >> The fact that isdefined only looks at the module scope is really
> >> irrelevant to my use case. Since the runtime can determine that the
> local
> >> variable is undefined as evidenced by an appropriate error, I wish I
> could
> >> do the same within my function without some clunky try ... catch
> mehcanism.
>
> A separate bool flag or a Nullable should work equally well.
>
> >>
> >>
> >> On Monday, May 11, 2015 at 7:31:06 PM UTC-4, Juha Heiskala wrote:
> >>>
> >>>  Hello,
> >>>
> >>> Am I missing something or doesn't isdefined detect local variables of a
> >>> function?
> >>>
> >>>
> >>> julia> foo()= begin bar=1; isdefined(current_module(), :bar); end
> >>> foo (generic function with 1 method)
> >>>
> >>> julia> foo()
> >>> false
> >>>
> >>> Best Regards,
> >>>
> >>> Juha
> >>>
> >>> julia version 0.3.5
> >>>
> >>> julia> versioninfo()
> >>> Julia Version 0.3.5
> >>> Commit a05f87b* (2015-01-08 22:33 UTC)
> >>> Platform Info:
> >>>   System: Linux (x86_64-linux-gnu)
> >>>   CPU: Intel(R) Core(TM) i7-3667U CPU @ 2.00GHz
> >>>   WORD_SIZE: 64
> >>>   BLAS: libopenblas (NO_LAPACK NO_LAPACKE DYNAMIC_ARCH NO_AFFINITY)
> >>>   LAPACK: liblapack.so.3
> >>>   LIBM: libopenlibm
> >>>   LLVM: libLLVM-3.3
> >
> >
>

Reply via email to