[#1649] Re: New Ruby projects — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1672] Re: Ruby 1.4 stable manual bug? — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1673] Re: Possible problem with ext/socket in 1.5.2 — itojun@...
[#1694] Conventions for our Ruby book — Dave Thomas <Dave@...>
[#1715] Install postgresql support — Ikhlasul Amal <amal@...>
Hi all,
Hi,
[#1786] Is this a bug? — Clemens Hintze <clemens.hintze@...>
(mailed & posted)
[#1814] Objects nested sometimes. — Hugh Sasse Staff Elec Eng <hgs@...>
I am attemptiong to write a package which consists of a workspace
[#1816] Ruby 1.5.3 under Tru64 (Alpha)? — Clemens Hintze <clemens.hintze@...>
Hi all,
Hi,
Yukihiro Matsumoto writes:
Hi,
Hi,
[#1834] enum examples? — Hugh Sasse Staff Elec Eng <hgs@...>
Has anyone any examplse of using the Enumerable module? I've had a
[#1844] Minor irritation, can't figure out how to patch it though! — Hugh Sasse Staff Elec Eng <hgs@...>
I was considering how difficult it would be to patch Ruby to accept
[#1889] [ruby-1.5.3] require / SAFE — ts <decoux@...>
[#1896] Ruby Syntax similar to other languages? — "David Douthitt" <DDouthitt@...>
From: Yukihiro Matsumoto <matz@netlab.co.jp>
[#1900] Enumerations and all that. — Hugh Sasse Staff Elec Eng <hgs@...>
Thank you to the people who responded to my questions about Enumerated
Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
On 16 Mar 2000, Dave Thomas wrote:
[#1929] Re: Class Variables — "David Douthitt" <DDouthitt@...>
| "David Douthitt" <DDouthitt@cuna.com> writes:
[#1942] no Fixnum#new ? — Quinn Dunkan <quinn@...>
Ok, I can add methods to a built-in class well enough (yes I know about succ,
[#1989] English Ruby/Gtk Tutorial? — schneik@...
Hi,
[#2022] rb_global_entry — ts <decoux@...>
[#2036] Anonymous and Singleton Classes — B_DAVISON <Bob.Davison@...>
I am a Ruby newbie and having some problems getting my mind around certain
[#2069] Ruby/GTK+ question about imlib --> gdk-pixbug — schneik@...
[#2073] Re: eval.rb fails — "Dat Nguyen" <thucdat@...>
The doc is fine, this happens only if you try to execute 'until' block
On Wed, 22 Mar 2000, Dat Nguyen wrote:
[#2084] Scope violated by import via 'require'? — Clemens Hintze <c.hintze@...>
Hi,
[#2104] ARGF or $< — Hugh Sasse Staff Elec Eng <hgs@...>
Has anyone any examples of how to use ARGF or $< as I cannot find much
Hi.
[#2165] Ruby strict mode and stand-alone executables. — "Conrad Schneiker" <schneiker@...>
Some people want Ruby to have a strict compile mode.
[#2203] Re: parse bug in 1.5 — schneik@...
[#2212] Re: Ruby/Glade usage questions. — ts <decoux@...>
>>>>> "m" == mrilu <mrilu@ale.cx> writes:
[#2241] setter() for local variables — ts <decoux@...>
[#2256] Multiple assignment of pattern match results. — schneik@...
[#2267] Re: Ruby and Eiffel — h.fulton@...
[#2309] Question about attribute writers — Dave Thomas <Dave@...>
Clemens Hintze <c.hintze@gmx.net> writes:
[ruby-talk:01963] Re: Enumerations and all that.
On 16 Mar 2000, Dave Thomas wrote:
>
> Well, I've thinking about enumerated types, and was wondering how they
> fit in to a typeless language.
>
> I came to the conclusion that there cannot be such things as free
> standing enumerated objects, because the semantics would be all
> wrong. If we have
>
> thing = Enum.new(:red, :green, :blue)
>
> Then how can we use it? We can have
>
> thing.set(:red)
>
> and
>
> thing.value #-> :red
>
> but does that help? Not really, because nothing stops you having
>
> thing = 'wombat'
Granted, but we can see that thing.type has changed.
I could do better if I could overload the = operator, but then we
would need destructors so that variables could be reused.
>
>
> To my mind, the benefit of enumerated types comes from ensuring that
> the range of values taken by something is predetermined, and we can't
> do that with free variables.
>
> However, we probably don't want to do it with free variables. Instead,
> we want to make sure that the parameter to our Door#setState method is
> either :open or :closed. So it seems to make sense to have enumerated
> types associated with class attributes.
I follow your reasoning but I don't think your conclusion is the only
possible one. :-) The hash I create with initialise in mine cannot
be modified later, which is the important thing constants give you.
> So, I came up with the following. Here's a class Spigot with two
> enumerated type attributes:
>
> class Spigot
>
> enum :color, [ :red, :green, :blue ]
> enum :size, { :small => -1, :medium => 0, :large => 99}
this flexibility I like.
>
> end
[...]
> The external world can set and query the value of either of these
> object attributes:
>
> s = Spigot.new
>
> s.color = :red
> s.size = :large
>
> p s.color
> p s.size
This can only be done for classes which have been given the enum method.
Also, this 'looks' like encapsulation is being broken, because s.color is
not a method call, but accessing something inside s.
>
> However, if you try to set an attribute using a value that's not
> associated with it, a TypeError is raised:
>
> s.color = :large #-> TypeError
OK, a TypeError was what I needed in mine. Thanks.
>
>
> Finally, within class Spigot, you can get to the internal value of an
> attribute using <attribute>_val. If the size is set to :large,
> size_val will return 99.
Mine does more or less that, but it uses @_value to hold the number. Being
a class, mine can be used without the containing class declaring an enum
method. With mine you can "break encapsulation" to get at the values the
thing can take, or you can just use strings. I have not thought of a nice
way to extend the idea of "enumeration" to things other than numbers,
which yours may be better at. (This would use the hash to tie names (or
even objects?) to objects other than numbers, but still allow the type
only the permitted values.)
>
> class Spigot
> def printState
> printf "Internal value of color is #{color_val}\n"
> printf "Internal value of size is #{size_val}\n"
> end
> end
>
>
> I implemented 'enum' by extending class Module. It's a fairly ugly
> hack right now, but there's scope for it to be tidied...
>
> Anyway, here's all the code. It works under 1.5, but I'm not sure if
> the new Symbol stuff means it doesn't work under 1.4.
Not sure what you mean here, the only "unusual" thing is the id2name
but that is in the 1.4 manual.
>
> I'd be interested in comments.
I hope these are of interest, though they are somewhat critical, they
are intended positively. There is some cunning stuff in that code
I'd like to re-use :-)
>
>
> Dave
>
> ############################ cut here #############################
Hugh
hgs@dmu.ac.uk