具有多个条件的ruby case语句如何工作

时间:2018-02-28 16:17:56

标签: ruby

我的代码:

def double_mails?(mail)

  if @mails_hash.include?(mail) && @mails_hash[mail] > 0
      p "true"
      return true
  elsif @mails_hash.include?(mail) && @mails_hash[mail] == 0
      @mails_hash[mail] =+ 1
      p "false double"
      return false
  else
      p "false else"
      return false
  end
end

我的问题:

当我尝试从上面的代码中创建这样的case语句时,程序逻辑不再起作用了:

def double_mails?(mail)
  case mail
    when @mails_hash.include?(mail) && @mails_hash[mail] > 0
      p "true"
      return true
    when @mails_hash.include?(mail) && @mails_hash[mail] == 0
      @mails_hash[mail] =+ 1
      p "false double"
      return false
    else
      p "false else"
      return false
  end
end

无论我传入哪个值,它总是跳进else块.if..else工作正常。 为什么它不起作用,如何修复语法使其作为case语句?

提前致谢。

1 个答案:

答案 0 :(得分:6)

如果您想要完全取代if - elsif功能,则应使用 case条件:

case
when @mails_hash.include?(mail) && @mails_hash[mail] > 0
  p "true"
  true
when @mails_hash.include?(mail) && @mails_hash[mail] == 0
  @mails_hash[mail] =+ 1
  p "false double"
  false
else
  p "false else"
  false
end

当您在case的调用中放入一个参数时,它用于使用三个等于例如大小写等于when子句进行比较:

case mail
when MailClass then ...
end

上面的代码实际上调用了MailClass.===(mail)