From: Jacob Fugal Date: 2006-02-08T01:47:40+09:00 Subject: Re: basic oO :: First Class Object On 2/7/06, jansenh wrote: > Hi all. > > What is a First Class Object, explained in Ruby context? A good description of First-class objects is here: http://en.wikipedia.org/wiki/First-class_object 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 Class.new, 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.0. [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 something...