Thanks. Initially I wanted to avoid having to use @anon because I wanted to
be able to avoid having to use the special syntax of
function ptest5{pfun}(::Type{pfun})
However, what I hadn't realized is that the @anon functions do actually
still work with the standard syntax. That is,
#function ptest5{pfun}(::Type{pfun})
function ptest5(pfun)
both work correctly, it's just the commented out one runs about 4 times
faster.
I'd still prefer to be able to do it without @anon, but this should work
fine. If I need something different, maybe I will get around to learning
metaprogramming.
On Monday, June 22, 2015 at 5:48:29 PM UTC-4, Tim Holy wrote:
>
> It's just
>
> foo = @anon (consump, labor) ->
> consump.^(1-sigmac)/(1-sigmac) + psi*(1-labor).^(1-sigmaI)/(1-sigmaI)
>
> --Tim
>
> On Monday, June 22, 2015 02:25:27 PM Andrew wrote:
> > I hope this is an easy question, but I'm stuck. I want to define this
> > function
> > function u(consump,labor)
> > consump.^(1-sigmac)/(1-sigmac) +
> psi*(1-labor).^(1-sigmal)/(1-sigmal)
> > end
> >
> > but I don't want to have to pass the parameters explicitly. They are
> never
> > going to change after the function is defined, so I would like it if I
> > could build them directly into the function as constants.
> >
> > The problem is that I plan to stick this function into a type, like so
> >
> > immutable UtilityFunction
> > u::Function
> > sigmac::Float64
> > sigmal::Float64
> > psi::Float64
> > end
> >
> > I am unaware of any method in which u::Function could self-reference the
> > elements of its type, which would be convenient, but I feel like I
> should
> > be able to define u::Function with the parameters built in. I admit I
> don't
> > really understand the scoping rules for functions which are contained in
> a
> > type. Were I defining u as an external function, I think it would have
> > access to the variables in the global scope, so I could just define
> > constants there and this would be fine. Since I'm trying to stick it in
> a
> > type, I don't know.
> >
> > As an aside, I plan to optionally use this function with the
> FastAnonymous
> > package. In that case it looks like this shouldn't be an issue, since
> > according to its documentation, "The value of any parameters gets
> "frozen
> > in" at the time of construction." That's exactly what I'm looking for
> here.
> >
> > I am pretty sure this could be done with a macro in the type's
> constructor,
> > but I'm hoping there's a simpler option.
>
>