Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Dog is not a Dog

A Dog is not a Dog

Switch statements and equivalence gotchas in Ruby

Avatar for Jeremy Cohen Hoffing

Jeremy Cohen Hoffing

February 13, 2015

Other Decks in Programming

Transcript

  1. case @activity.class when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end
  2. case @activity.class when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “Why isn’t this working”
  3. case @activity.class when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “Why isn’t this working”
  4. case @activity when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “User has logged in”
  5. case @activity.class when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “Why isn’t this working”
  6. case @activity.class when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “Why isn’t this working” => UserLoggedInActivity
  7. case @activity.class when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “Why isn’t this working” => UserLoggedInActivity UserLoggedInActivity == UserLoggedInActivity => true
  8. ===

  9. Every object in Ruby inherits this method 1 === 1

    1 == 1 => true => true “a” === “a” “a” == “a” => true => true @dog === @dog @dog == @dog => true => true
  10. String === “a” => true Array === [] => true

    Dog === @dog => true “Is this argument an instance of yourself?” “a”.is_a?(String) => true [].is_a?(Array) => true @dog.is_a?(Dog) => true
  11. case @activity when UserLoggedInActivity “User has logged in.” when UserMessagedActivity

    “User sent a message.” when UserLoggedOutActivity “User logged out.” else “Why isn’t this working” end => “User has logged in” UserLoggedInActivity === @activity