Implementing a case statement to satisfy several when conditions

I am using Ruby on Rails 3, and I would like to use a statement casethat, even after matching the statement, whencan continue to check others when statementto the last else.

for instance

case var
when '1'
  if var2 == ...
    ...
  else
    ...
    puts "Don't make nothig but continue to check!"
    # Here I would like to continue to check if a 'when' statement will match 'var' until the 'else' case
  end
when '2'
  ...
...
else
  put "Yeee!"

end

Is this possible in Ruby? If so, how?

+5
source share
2 answers

Ruby has no failure for case.

One alternative is a series of statements ifthat use a method ===that is used caseto compare elements within.

has_matched? = false

if '2' === var
  has_matched? = true
  # stuff
end

if '3' === var
  has_matched? = true
  # other stuff
end

if something_else === var
  has_matched? = true
  # presumably some even more exciting stuff
end

if !has_matched?
  # more stuff
end

.

  • DRY: has_matched? = true .

  • var ===, , case .

matches?, . , , ( , var), else_do, , @has_matched?.

Edit:

=== , , . , "" . :

class String
  def ===(other_str)
    self.strip[0, other_str.length].downcase == other_str.downcase
  end
end

class Array
  def ===(str)
    self.any? {|elem| elem.include?(str)}
  end
end

class Fixnum
  def ===(str)
    self == str.to_i
  end
end

, Ruby case var, === , var.

+1

, ruby, if elsif else, , , :

case var
when 1
  dosomething
when 2..3
  doSomethingElse
end

case
when var == 1
   doSomething
when var < 12
   doSomethingElse
end

SO-. , if elsif else , :

if my_number == "1"
   #do stuff when equals 1
elsif my_number == "e"
   #same thing here
else
   #default, no case found
end 
+3

All Articles