From: Henning Bekel Date: 2008-09-16T08:07:47+09:00 Subject: Re: New to Ruby...help needed Phillip Prentice wrote: > Hi, > > I am in the process of teaching myself Ruby and so far its great, > however, I am coming from a procedural background and the concept of > objects/classes are a little difficult for me to put into action. Is it > possible to have your object execute code when it is first created? > Perhaps some sample code and an example of what I want is needed. > > Here is my desired goal: > > x = SingleInst.new("TEST<5>") > puts x.name returns 'TEST<5>" > puts x.start_index returns '5' > > Here is my code: > > class Sig > attr_accessor :name > def initialize(name) > @name = name > end > def name > return @name > end > def set_name(name) > @name = name > end > end > > class Normal < Sig > attr_accessor :name, :type > def initialize(name) > @name = name > @type = "normal" > end > def to_s > @name + "\n" + \ > @type + "\n" > end > def get_type > return @type > end > > end > > class SingleInst < Sig > attr_accessor :name, :type, :start_index > def initialize(name) > @name = name > @type = "SingleInst" > @start_index = "" > end > > def set_start_index(name) > ##Something here > end > > def get_start_index > return @start_index > end > > end > > I want the SingleInst object to automatically parse the name and grab > the digit enclosed by '<>' and set to start_index when you created a new > SingleInst object. Is this possible or is there a better way to > accomplish this? > > Thanks, > > Phillip Just do anything you need to initialize the object in the initialize function, that's what it's used for. Here's a class that does what you described: class SingleInst attr_accessor :name, :start_index def initialize(name) @name = name # get the digit using a regexp... @name =~ /<(\d)>/ @start_index = $1.to_i end end x = SingleInst.new("foo <5>") puts x.start_index puts x.name You don't need to define setters and getters like that if you're using attr_accessor. I don't know what all that inheritance is supposed to do, put you should probably read up on the super() method as well. Henning