[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: Comparing objects

From: Graham Menhennitt <graham@...>
Date: 2013-06-17 21:25:16 UTC
List: ruby-talk #408299
On 18/06/2013 2:06 AM, Josh Cheek wrote:
> On Mon, Jun 17, 2013 at 10:52 AM, Thom T. <lists@ruby-forum.com
> <mailto:lists@ruby-forum.com>> wrote:
>
>     How do I compare two objects in Ruby, considering only attributes
>     values?
>
>     For example:
>
>       class Foo
>           attr_accessor :bar, :baz
>       end
>
>       lorem = Foo.new
>       ipsum = Foo.new
>
>       lorem.bar = 1
>       lorem.baz = 2
>
>       ipsum.bar = 1
>       ipsum.baz = 2
>
>       puts lorem == ipsum # false
>
>     Both objects belongs to the same class and also have the same
>     attributes
>     values.
>
>     Thanks.
>
>
> I'd do it like this
>
> class Foo
>   attr_accessor :bar, :baz
>   def ==(foo)
>     foo.kind_of?(self.class) && bar == foo.bar && baz == foo.baz
>   end
> end
>
> Only define <=> if your foos are ordered.
I suspect that the OP is looking for something a bit more generalised.

        def ==(rhs)
            return false unless rhs.is_a?(self.class)
            instance_variables.each do |var|
                return false unless instance_variable_get(var) ==
rhs.instance_variable_get(var)
            end
            return true
        end

Note that the first line of this can be changed according to taste:
- as above, two objects will compare as equal if the class of the right
hand side is the same as or a sub-class of the left hand side
- remove it completely in which case you get "duck typing" equality (no
relationship needed between classes of object)
- change it to "return false unless rhs.class == lhs.class" in which
case the two objects must be of the same class
In the first case, a == b will not necessarily return the same as b == a.

Also, note that this code allows the right hand side to have extra
instance variables that the left hand side does not, but they can still
compare as equal. That may or may not be desirable. If not, you need to
test for it as well. Again, the way I've written it, a == b is not the
same as b == a.

Graham
-

In This Thread