basic oO :: First Class Object

basic oO :: First Class Object

Post by jansen » Wed, 08 Feb 2006 16:40:08

Hi all.

What is a First Class Object, explained in Ruby context?

regards, Henning

basic oO :: First Class Object

Post by Wilson Bil » Wed, 08 Feb 2006 23:21:02

"first class" is a general programming-language term for something
that has all the features and behaviors of 'richer' parts of the
Usually it's used when pointing out an interesting feature. Most
languages don't go around crowing about having "first-class Strings".

In Ruby, classes are also objects. Since this is cool and unusual, you
might hear people say that: 'in Ruby, classes are first-class
objects', or 'integers are first-class objects'.


basic oO :: First Class Object

Post by Jacob Fuga » Thu, 09 Feb 2006 01:47:40

A good description of First-class objects is here:

Note that the above mentions First-class objects, not First-class
Objects. That is, the "object" being talked about is more vague than a
Ruby Object. A First-class object, as defined above, is any entity
(ie. construct) of the language which can be used without restriction
compared to other "objects"/entities in the language.

For Ruby, the prime mechanics of the language are message-passing with
object-references as arguments. Since any entity in the Ruby --
methods[1], integers, classes, strings, IO streams, or anything else
you can think of -- *can* be represented as an Object which can be
passed around and receive messages of it's own, this makes all the
entities in Ruby first-class objects[2].

Jacob Fugal

[1] Method objects are a little special. Specifically, one of the
common criteria for first-class objects is anonymous creation. For
example, and anonymous class can be created with, and an
anonymous lambda can be created via lambda{}. But while a Method
object can be derived from a method, the native representation of the
method is *not* an object, and the method must exist in a
non-anonymous form before the Method can be obtained. For me, however,
anonymous lambdas make up for this deficiency, especially once the
call semantics become unified and lambdas can handle blocks in 1.9 or

[2] As per my definition of the prime mechanics. There may be other
activities within the language for which certain entities are not
first-class, such as mentioned in footnote 1. I also may have missed

basic oO :: First Class Object

Post by jansen » Fri, 10 Feb 2006 01:54:51

Thanx for good explanations! I think I've got the idea now... regards,