In 0.4 you can do this using callable types, which is a convenient way of
encapsulating parameters. That would let you use the syntax u(2.) .
Alternatively, why not just drop the default parameters and pass them
explicitly? The way I did this recently was to make use of the type system
and multiple dispatch
immutable CRRA
a::Float64
end
immutable CRRA_hours
a::Float64
b::Float64
end
function u(UF::CRRA, c)
a = UF.a
c^(1-a)/(1-a)
end
function u(UF::CRRA_hours, c, h)
a = UF.a
b = UF.b
((c/(h^b))^(1-a))/(1-a)
end
a = 2.
b = 0.8
UF = CRRA(a)
u(UF, 2.)
outputs -0.5 and
UF = CRRA_hours(a, b)
u(UF, 2., 0.5)
outputs -0.2871745887492587.
On Wednesday, August 26, 2015 at 12:22:19 PM UTC-4, Nils Gudat wrote:
>
> I'm defining a function with two methods as follows:
>
> a = 2.
> b = 0.8
>
> function u(c::Float64, h::Float64, b=b, a=a)
> ((c/(h^b))^(1-a))/(1-a)
> end
>
> function u(c::Float64, a=a)
> c^(1-a)/(1-a)
> end
>
> However, when calling u(2.), the result is -0.87..., which should be the
> result of the function call u(2., 2.).
> Clearly I misunderstand how multiple dispatch is working here - I thought
> when defining a function f() with one method f(::Float64), and another
> method f(::Float64, ::Float64), the two-argument version would only be
> called if I'm actually supplying two arguments!?
>