Skip to content

Instantly share code, notes, and snippets.

@drKreso
Forked from avdi/when.rb
Created December 6, 2011 07:05
Show Gist options
  • Select an option

  • Save drKreso/1437135 to your computer and use it in GitHub Desktop.

Select an option

Save drKreso/1437135 to your computer and use it in GitHub Desktop.
Experimenting with Object#when in Ruby
class Object
def when(matcher)
if matcher === self then yield(self) else self end
end
end
# I read it like this : if "when" lambda/proc is true execute block, otherwise return self
#deeply confused
#Proc#=== is equivalent to Proc#call
#kinda like this?
matcher.call(self)
#BUT this is of course not working for nil - why is it working for
matcher === self
#I don't know what am I missing
@avdi
Copy link

avdi commented Dec 6, 2011

When the matcher is nil Ruby calls NilClass#=== which is the same as Object#===. Object#=== simply delegates to Object#==.

You could use any object which responds to ===:

obj.when(/foo/) { ... }
obj.when(Integer) { ... }
obj.when(1...9) { ... }

Etc.

Does that clear it up?

@drKreso
Copy link
Author

drKreso commented Dec 6, 2011

It sure does. My mind is a bit blown right now, so I might need some time to digest all this. Would you mind if I blogged a bit about this?

@avdi
Copy link

avdi commented Dec 6, 2011 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment