Submit Search
Upload
All Objects are created .equal?
•
0 likes
•
539 views
G
gsterndale
Follow
Understanding equality in your Ruby codez https://github.com/gsterndale/equality
Read less
Read more
Technology
Entertainment & Humor
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
ScotRuby - Dark side of ruby
ScotRuby - Dark side of ruby
Gautam Rege
Licão 10 operators
Licão 10 operators
Acácio Oliveira
F# intro
F# intro
Alexey Raga
Refactor like a boss
Refactor like a boss
gsterndale
Web 2.0 - Beta
Web 2.0 - Beta
vaclav.lohr
Performance Architecture Manifesto
Performance Architecture Manifesto
sirlegendary
SIR Brochure
SIR Brochure
sirlegendary
School Presentation St Peter's RC Primary School and Nursery
School Presentation St Peter's RC Primary School and Nursery
Tiina Sarisalmi
Recommended
ScotRuby - Dark side of ruby
ScotRuby - Dark side of ruby
Gautam Rege
Licão 10 operators
Licão 10 operators
Acácio Oliveira
F# intro
F# intro
Alexey Raga
Refactor like a boss
Refactor like a boss
gsterndale
Web 2.0 - Beta
Web 2.0 - Beta
vaclav.lohr
Performance Architecture Manifesto
Performance Architecture Manifesto
sirlegendary
SIR Brochure
SIR Brochure
sirlegendary
School Presentation St Peter's RC Primary School and Nursery
School Presentation St Peter's RC Primary School and Nursery
Tiina Sarisalmi
What WELD does
What WELD does
Reid Williams
plaY [commercial]
plaY [commercial]
smwarfield
Personagraph Whitepaper
Personagraph Whitepaper
Tapan Kamdar
Digital Trends Impacting News Companies
Digital Trends Impacting News Companies
Reid Williams
Server Side 2009
Server Side 2009
vaclav.lohr
Copyright and Fair Use for USU Extension
Copyright and Fair Use for USU Extension
Britt Fagerheim
Third comeback report 4.8,2011
Third comeback report 4.8,2011
Carlos Miranda Levy
Ctm louvre
Ctm louvre
claireso
The vmware story
The vmware story
Gian Marco Pizzuti
Change history with Git
Change history with Git
gsterndale
Czech Day in Kozani
Czech Day in Kozani
Tiina Sarisalmi
Como subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodle
Jose Ramirez
Sinsai.info and Crisis Mapping
Sinsai.info and Crisis Mapping
Carlos Miranda Levy
SEO pro manažery
SEO pro manažery
vaclav.lohr
Smartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - Yogyakarta
Jarwadi MJ
Lunch Menus and Recipes from Portugal
Lunch Menus and Recipes from Portugal
Tiina Sarisalmi
Integrating Library Resources into Blackboard
Integrating Library Resources into Blackboard
Britt Fagerheim
Christmas Handicraft by Thanasis
Christmas Handicraft by Thanasis
Tiina Sarisalmi
Kort Om Etikk2
Kort Om Etikk2
guest8e448c
Library As Teaching Resource
Library As Teaching Resource
Britt Fagerheim
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
panagenda
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
IES VE
More Related Content
Viewers also liked
What WELD does
What WELD does
Reid Williams
plaY [commercial]
plaY [commercial]
smwarfield
Personagraph Whitepaper
Personagraph Whitepaper
Tapan Kamdar
Digital Trends Impacting News Companies
Digital Trends Impacting News Companies
Reid Williams
Server Side 2009
Server Side 2009
vaclav.lohr
Copyright and Fair Use for USU Extension
Copyright and Fair Use for USU Extension
Britt Fagerheim
Third comeback report 4.8,2011
Third comeback report 4.8,2011
Carlos Miranda Levy
Ctm louvre
Ctm louvre
claireso
The vmware story
The vmware story
Gian Marco Pizzuti
Change history with Git
Change history with Git
gsterndale
Czech Day in Kozani
Czech Day in Kozani
Tiina Sarisalmi
Como subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodle
Jose Ramirez
Sinsai.info and Crisis Mapping
Sinsai.info and Crisis Mapping
Carlos Miranda Levy
SEO pro manažery
SEO pro manažery
vaclav.lohr
Smartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - Yogyakarta
Jarwadi MJ
Lunch Menus and Recipes from Portugal
Lunch Menus and Recipes from Portugal
Tiina Sarisalmi
Integrating Library Resources into Blackboard
Integrating Library Resources into Blackboard
Britt Fagerheim
Christmas Handicraft by Thanasis
Christmas Handicraft by Thanasis
Tiina Sarisalmi
Kort Om Etikk2
Kort Om Etikk2
guest8e448c
Library As Teaching Resource
Library As Teaching Resource
Britt Fagerheim
Viewers also liked
(20)
What WELD does
What WELD does
plaY [commercial]
plaY [commercial]
Personagraph Whitepaper
Personagraph Whitepaper
Digital Trends Impacting News Companies
Digital Trends Impacting News Companies
Server Side 2009
Server Side 2009
Copyright and Fair Use for USU Extension
Copyright and Fair Use for USU Extension
Third comeback report 4.8,2011
Third comeback report 4.8,2011
Ctm louvre
Ctm louvre
The vmware story
The vmware story
Change history with Git
Change history with Git
Czech Day in Kozani
Czech Day in Kozani
Como subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodle
Sinsai.info and Crisis Mapping
Sinsai.info and Crisis Mapping
SEO pro manažery
SEO pro manažery
Smartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - Yogyakarta
Lunch Menus and Recipes from Portugal
Lunch Menus and Recipes from Portugal
Integrating Library Resources into Blackboard
Integrating Library Resources into Blackboard
Christmas Handicraft by Thanasis
Christmas Handicraft by Thanasis
Kort Om Etikk2
Kort Om Etikk2
Library As Teaching Resource
Library As Teaching Resource
Recently uploaded
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
panagenda
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
IES VE
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
LoriGlavin3
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
LoriGlavin3
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
Wes McKinney
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
LoriGlavin3
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
Inflectra
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
UiPathCommunity
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
DianaGray10
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
Farhan Tariq
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
MounikaPolabathina
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
Lonnie McRorey
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
Raghuram Pandurangan
A Framework for Development in the AI Age
A Framework for Development in the AI Age
Cprime
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
panagenda
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
Rick Flair
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
Pixlogix Infotech
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
Mydbops
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
Sergiu Bodiu
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
LoriGlavin3
Recently uploaded
(20)
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
A Framework for Development in the AI Age
A Framework for Development in the AI Age
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
All Objects are created .equal?
1.
All Objects Are
Created .equal? Understand equality in your Ruby codez
2.
github.com/gsterndale/equality
3.
Equality methods a ==
b a === b a.eql? b a.equal? b
4.
==
5.
Everyday equality (==) a
== b
6.
Default == a =
MyBasicClass.new b = MyBasicClass.new a == b # => false b = a a == b # => true
7.
Overriding == class RomanNumeral
def ==(other) if other.respond_to?(:to_f) self.to_f == other.to_f else false end end end
8.
Overriding == iv
= RomanNumeral.new('IV') iiii = RomanNumeral.new('IIII') iv == iiii # => true
9.
===
10.
case statement equality
(===) a === b
11.
Default === a =
Object.new b = Object.new case a when b 'b must === a' else 'b must NOT === a' end # => "b must NOT === a"
12.
Float === a =
1 b = 1.0 case a when b 'b must === a' else 'b must NOT === a' end # => "b must === a"
13.
Regexp === case '123' when
/d+/ 'At least one number' else 'No numbers found' end # => "At least one number"
14.
When === !=
== /d+/ == '123' # => false /d+/ === '123' # => true
15.
Class === case 'abc' when
String 'It is a String!' else 'Not a String' end # => "It is a String!"
16.
Asymmetry /d+/ === '123' #
=> true '123' === /d+/ # => false
17.
Asymmetry 2 === Integer #
=> false Integer === 2 # => true Fixnum === 2 # => true
18.
.equal?
19.
Object equality (.equal?) a
= 'FOO' b = a a.equal? b # => true a.equal? 'FOO' # => false
20.
.eql?
21.
Hash key equality
(.eql?) a.eql? b
22.
Default .eql? foo =
Object.new hash = { foo => 'My value' } bar = Object.new foo.equal? bar # => false foo.eql? bar # => false hash[bar] # => nil
23.
String .eql? foo =
'My Key' hash = { foo => 'My value' } bar = 'My Key' foo.equal? bar # => false foo.eql? bar # => true hash[bar] # => "My value"
24.
Overriding .eql? class RomanNumeral
def eql?(other) other.kind_of?(RomanNumeral) && self.to_i.eql?(other.to_i) end end
25.
Overriding .eql? iv
= RomanNumeral.new('IV') hash = { iv => 'Four' } iiii = RomanNumeral.new('IIII') iv.equal? iiii # => false iv.eql? iiii # => true hash[iiii] # => "Four"
26.
Comparable
27.
Comparison methods # You
must define <=> a <=> b # => -1, 0, 1 -or- nil a == b a > b a < b a >= b a <= b c.between?(a, b)
28.
Overriding <=> class RomanNumeral
def <=>(other) if other.respond_to?(:to_f) self.to_f <=> other.to_f else nil end end end
29.
Overriding <=> v =
RomanNumeral.new('V') x = RomanNumeral.new('X') v <=> x # => -1 v >= x # => false RomanNumeral.new('VIII').between?(v, x) # => true
30.
Sorting Enumerables iv
= RomanNumeral.new('IV') iiii = RomanNumeral.new('IIII') x = RomanNumeral.new('X') [iv, x, iiii] # => [IV, X, IIII] [iv, x, iiii].sort # => [IV, IIII, X]
Download now