I don't quite understand what you fail to achieve.  Using other values
than integers for the enum does not work, if that is the question.

If you just try to make your custom enum, then it cannot be used with
the @enum macro.

immutable MyEnum
    field1::Type1
    filed2::Type2
end

# no need/use for @enum:
enum1 = MyEnum(f11,f12)
enum2 = MyEnum(f21,f22)

But it seems a bit strange to have an enumeration which uses two values,
as an enumeration suggests that there is a mapping to the integers!

Mauro

On Fri, 2015-10-30 at 09:37, Eric Forgy <eric.fo...@gmail.com> wrote:
> I am thinking about making an Enum type MyEnum, but each MyEnum is a
> composite immutable type. Is that possible (recommended) and how could I do
> that?
>
> I've looked at
>
>    - https://github.com/JuliaLang/julia/pull/10168
>    - And the @enum section of Docs
>
> but it still isn't obvious to me yet how to do it or if it is even
> possible/recommended.
>
> In psuedo-code, I'd like something like this:
>
> @enum MyEnum enum1 enum2 enum3
>
> but each enum[i] is a composite immutable type. How would I construct them?
>
> I thought of something like:
>
> immutable MyEnum
>     field1::Type1
>     filed2::Type2
> end
>
> @enum MyEnum enum1 = MyEnum(f11,f12) enum2 = MyEnum(f21,f22)
>
> but I don't think that will work.
>
> Any ideas?
>
> Thank you.
>
>
> On Tuesday, January 27, 2015 at 4:55:18 AM UTC+8, Reid Atcheson wrote:
>>
>> Ok now that you have put it there, the comments in the documentation make
>> more sense to me. It looks like both yours and mine are essentially
>> equivalent, but yours is simpler. I was aiming for the following behavior
>> with my implementation:
>>
>> - different enum types won't typecheck (can't do "if e1::EnumType1 ==
>> e2::EnumType2" without error).
>> - Array of enum type values contiguous in memory, for easy passing to C.
>> (immutable should do this)
>> - referring to enum fields by name, not by their numbering.
>>
>> I will switch to what you have written, it looks like it hits all of my
>> points while not simultaneously abusing the type system.
>>
>> On Monday, January 26, 2015 at 2:16:33 PM UTC-6, Mauro wrote:
>>>
>>> There is a FAQ entry on this which suggests not to use types each of
>>> elements of the enum (if I recall correctly).
>>>
>>> I recently did a enum like this:
>>>
>>> export nonstiff, mildlystiff, stiff
>>> abstract Enum
>>> immutable Stiff <: Enum
>>>     val::Int
>>>     function Stiff(i::Integer)
>>>         @assert 0<=i<=2
>>>         new(i)
>>>     end
>>> end
>>> const nonstiff = Stiff(0)
>>> const mildlystiff = Stiff(1)
>>> const stiff = Stiff(2)
>>>
>>> Then you can just do
>>> if someflag==nonstiff
>>>    do_something
>>> end
>>>
>>> So no need either to refer to the numeral value.  But I'm not sure
>>> whether this is better or not.
>>>
>>> On Mon, 2015-01-26 at 19:49, Reid Atcheson <reid.a...@gmail.com> wrote:
>>> > Hey all. I have frequently been in the position of wanting enumerations
>>> in
>>> > Julia. I have finally settled on the implementation linked below which
>>> lets
>>> > me refer to flags
>>> > in a named way and only specify their underlying numbering once. Is
>>> this
>>> > the best way, or are there better ways I haven't figured out?
>>> >
>>> > https://github.com/ReidAtcheson/EnumsInJulia
>>>
>>>

Reply via email to