没有目标对象的案例表达:是否应该使用它?

时间:2014-07-18 03:24:28

标签: ruby syntax

我知道你可以使用没有目标对象的case语句,如下所示:

case 
when condition1
  do_something1
when condition2
  do_something2
else
  do_something_else
end

这相当于:

if condition1
  do_something1
elsif condition2
  do_something2
else
  do_something_else
end

是否有任何理由表达式允许在没有目标对象的情况下使用?是否有人想要以这种方式使用case表达式?

2 个答案:

答案 0 :(得分:-1)

它可用于检查多个表达式。考虑这个例子:

print "Enter first string: "
some_string = gets.chomp
print "Enter second string: "
some_string1 = gets.chomp
puts case
when some_string.match(/\d/)
  'String has numbers'
when some_string1.match(/[a-zA-Z]/)
  'String has letters'
else
  'String has no numbers or letters'
end

在这里,您必须检查两个不同的变量。也许专家们有不同的看法。

答案 1 :(得分:-1)

实际上没有区别,空case语句不会拨打===,因为无法呼叫。例如:

class CaseExample

  def ===(other)
    puts "received #{other}"
    super(other)
  end

end

当这样调用时:

case
  when CaseExample.new()
    puts "got here"
end

将打印:

"got here"

虽然:

case "me"
  when CaseExample.new()
    puts "got here"
end

它将打印:

"received me"

如果没有案件对象开始,我宁愿选择if/elsif,因为意图会更清晰。