Defining an object constructor that look like [] or {} ...?

S

Sonny Chee

Hey Guys,

Ruby has built in object constuctors for Array and Hash via [] and {}..
ie:

an_array = [1, 2, 3, 6]
a_hash = {1=>3, 2=>5, 'a'=>'green'}

I would like to do the same for one of my classes.. i.e.

my_object = |2, 3, 5, 7|

should yield the same result as if I had done the following:

my_object = MyClass.new([2, 3, 5, 7])

Is this possible?

Sonny.
 
T

Tom Link

my_object = MyClass.new([2, 3, 5, 7])

You should be able to use

[] as class method:

my_object = MyClass[2, 3, 5, 7]

a method in Kernel or similar:

my_object = MyClass(2, 3, 5, 7)

tom.
 
M

Matthew Moss

Hey Guys,

Ruby has built in object constuctors for Array and Hash via [] and
{}..
ie:

an_array = [1, 2, 3, 6]
a_hash = {1=>3, 2=>5, 'a'=>'green'}

I would like to do the same for one of my classes.. i.e.

my_object = |2, 3, 5, 7|

should yield the same result as if I had done the following:

my_object = MyClass.new([2, 3, 5, 7])

Is this possible?

Offhand, I doubt you can use || for this task, but you can use [].

class MyClass
def MyClass.[](*arr)
MyClass.new(arr)
end

def initialize(arr)
@arr = arr
end
end
x = MyClass[2, 3, 5, 7]
=> #<MyClass:0x7a3b4 @arr=[2, 3, 5, 7]>
 
R

Robert Klemme

Ruby has built in object constuctors for Array and Hash via [] and {}..
ie:

an_array = [1, 2, 3, 6]
a_hash = {1=>3, 2=>5, 'a'=>'green'}

I would like to do the same for one of my classes.. i.e.

my_object = |2, 3, 5, 7|

should yield the same result as if I had done the following:

my_object = MyClass.new([2, 3, 5, 7])

Is this possible?

No, because you would have to change Ruby's syntax. See the other
postings for alternatives.

Kind regards

robert
 
F

F. Senault

Le 16 janvier 2009 à 20:26, Tom Link a écrit :
my_object = MyClass.new([2, 3, 5, 7])

You should be able to use

[] as class method:

my_object = MyClass[2, 3, 5, 7]

a method in Kernel or similar:

my_object = MyClass(2, 3, 5, 7)

A method in Array :

class Array
def to_my_class
MyClass.new(self)
end
end

my_object = [2, 3, 5, 7].to_my_class

Fred
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,990
Messages
2,570,211
Members
46,796
Latest member
SteveBreed

Latest Threads

Top