So I am not sure exactly what you want. Maybe instead you are looking for something like this?
@enum Material Sic Al Vac
immutable Layer
material::Material
thickness::Float64
end
permittivity(l::Layer) = permittivity(Val{l.material})
function permittivity(::Type{Val{Al}})
println("The permittivity of Aluminum is grand indeed")
end
function permittivity(::Type{Val{Sic}})
println("But even grander is Silicium")
end
#Then
l = Layer(Al, 4)
permittivity(l)
l2 = Layer(Sic, 4)
permittivity(l2)
@time ml = [Layer(Al,0.0) ; Layer(Vac,0.0)]
0.000008 seconds (7 allocations: 336 bytes)