PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.ruby > Modifying FIX::* method
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Modifying FIX::* method

Réponse
 
LinkBack Outils de la discussion
Vieux 31/03/2008, 18h58   #1
Alex DeCaria
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Modifying FIX::* method

I have a class such as

Class Foo
def initialize(x)
@x = x
end
attr_read :x
end

I want to be able to multiply a NUMERIC object by my Foo object and have
it return a new Foo object with all the instance variables multiplied by
the Numeric object. For example:

y = Foo.new(3)
z = 2*y
print z.x => 6

or

z = 2.0*y
print z.x => 6.0

I'm thinking I have to modify the "*" method for all the subclasses of
the NUMERIC class. Is this correct? Or am I missing something.

I know I can put a "*" method in my Foo class, and get it to do things
like "y*2", but how do I get "2*y"?

Thanks in advance.
--
Posted via http://www.ruby-forum.com/.

  Réponse avec citation
Vieux 31/03/2008, 19h24   #2
Jason Roelofs
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Modifying FIX::* method

The proper way is to implement and enforce "y * 2". Is there any
specific reason you want people to be able to do "2 * y" ?

Jason

On Mon, Mar 31, 2008 at 1:58 PM, Alex DeCaria
<alex.decaria@millersville.edu> wrote:
> I have a class such as
>
> Class Foo
> def initialize(x)
> @x = x
> end
> attr_read :x
> end
>
> I want to be able to multiply a NUMERIC object by my Foo object and have
> it return a new Foo object with all the instance variables multiplied by
> the Numeric object. For example:
>
> y = Foo.new(3)
> z = 2*y
> print z.x => 6
>
> or
>
> z = 2.0*y
> print z.x => 6.0
>
> I'm thinking I have to modify the "*" method for all the subclasses of
> the NUMERIC class. Is this correct? Or am I missing something.
>
> I know I can put a "*" method in my Foo class, and get it to do things
> like "y*2", but how do I get "2*y"?
>
> Thanks in advance.
> --
> Posted via http://www.ruby-forum.com/.
>
>


  Réponse avec citation
Vieux 31/03/2008, 19h27   #3
Adam Shelly
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Modifying FIX::* method

On 3/31/08, Alex DeCaria <alex.decaria@millersville.edu> wrote:
> I want to be able to multiply a NUMERIC object by my Foo object and have
> it return a new Foo object with all the instance variables multiplied by
> the Numeric object.

[...]
> I'm thinking I have to modify the "*" method for all the subclasses of
> the NUMERIC class. Is this correct? Or am I missing something.
>


You don't need to modify Numeric, you just need to tell it how to
coerce your object into a number.

irb(main):057:0* class Foo
irb(main):058:1> def initialize(x)
irb(main):059:2> @x=x
irb(main):060:2> end
irb(main):061:1> def coerce(n)
irb(main):062:2> [n,@x]
irb(main):063:2> end
irb(main):064:1> end
=> nil
irb(main):065:0> 2 + Foo.new(3)
=> 5
irb(main):066:0> f=Foo.new(4)
=> #<Foo:0x283b13c @x=4>
irb(main):067:0> 8/f
=> 2

-Adam

  Réponse avec citation
Vieux 31/03/2008, 19h35   #4
Shawn Anderson
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Modifying FIX::* method

[Note: parts of this message were removed to make it a legal post.]

Adam,
I believe the OP wanted a Foo object returned, not a Fixnum.

/Shawn

On Mon, Mar 31, 2008 at 11:27 AM, Adam Shelly <adam.shelly@gmail.com> wrote:

> On 3/31/08, Alex DeCaria <alex.decaria@millersville.edu> wrote:
> > I want to be able to multiply a NUMERIC object by my Foo object and have
> > it return a new Foo object with all the instance variables multiplied by
> > the Numeric object.

> [...]
> > I'm thinking I have to modify the "*" method for all the subclasses of
> > the NUMERIC class. Is this correct? Or am I missing something.
> >

>
> You don't need to modify Numeric, you just need to tell it how to
> coerce your object into a number.
>
> irb(main):057:0* class Foo
> irb(main):058:1> def initialize(x)
> irb(main):059:2> @x=x
> irb(main):060:2> end
> irb(main):061:1> def coerce(n)
> irb(main):062:2> [n,@x]
> irb(main):063:2> end
> irb(main):064:1> end
> => nil
> irb(main):065:0> 2 + Foo.new(3)
> => 5
> irb(main):066:0> f=Foo.new(4)
> => #<Foo:0x283b13c @x=4>
> irb(main):067:0> 8/f
> => 2
>
> -Adam
>
>


  Réponse avec citation
Vieux 31/03/2008, 19h37   #5
Adam Shelly
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Modifying FIX::* method

On 3/31/08, Adam Shelly <adam.shelly@gmail.com> wrote:
> On 3/31/08, Alex DeCaria <alex.decaria@millersville.edu> wrote:
> > I want to be able to multiply a NUMERIC object by my Foo object and have
> > it return a new Foo object with all the instance variables multiplied by
> > the Numeric object.

> [...]
> > I'm thinking I have to modify the "*" method for all the subclasses of
> > the NUMERIC class. Is this correct? Or am I missing something.
> >

> You don't need to modify Numeric, you just need to tell it how to
> coerce your object into a number.
>


Oops, I didn't read your message closely enough. Maybe Jason is
right, and you shouldn't even consider doing this, but something like
the following should work:

class Foo
attr_reader :x,:y
def initialize(x,y)
@x=x
@y=y
end
def coerce(n)
[Foo.new(n,n),self]
end
def +(other)
Foo.new(@x+other.x,@y+other.y)
end
def /(other)
Foo.new(@x/other.x,@y/other.y)
end

end

p (2 + Foo.new(3,0)) #=> #<Foo:0x27afcb8 @y=2, @x=5>
p f=Foo.new(4,10) #=> #<Foo:0x27afc68 @y=10, @x=4>
p 100/f #=> #<Foo:0x27afbdc @y=10, @x=25>

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 07h35.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,10171 seconds with 13 queries