[#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: Josh Cheek <josh.cheek@...>
Date: 2013-06-17 22:11:34 UTC
List: ruby-talk #408302
On Mon, Jun 17, 2013 at 4:25 PM, Graham Menhennitt <graham@menhennitt.com.au
> wrote:

>  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> 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.
>
>
Perhaps, but I think this is not a good approach.

It's too magical:
* You give up control of what constitutes equality (these kind of implicit
assumptions seem to always break down)
* You store something in a var and all of a sudden your objects aren't
showing up equal. It really sucks when making some change that doesn't
matter suddenly causes everything to break for no obvious reason.
* You can't look at the behaviour and figure out what it's doing, b/c it's
violating encapsulation.

It's suddenly state based instead of value based:
* Say you have a method that lazily initializes some var: `def users()
@users ||= [] end` and someone called `obj.users.any?` on the one, but not
the other. Now your objects aren't equal.
* It doesn't matter if bank1 has @pennies=100@dollars=0 and bank2 has
@pennies=0@dollars=1, these have the same value, but it doesn't matter, b/c
the state representation is different,
* You can't pass a mock in, b/c it's no longer about interfaces, it's now
about the state of these variables.

-Josh

In This Thread