Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个条件的ruby case语句是如何工作的_Ruby - Fatal编程技术网

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

具有多个条件的ruby case语句是如何工作的,ruby,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 doubl

我的代码:

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语句工作


提前感谢。

如果您想要确切替代
If
-
elsif
功能,您应该使用空
案例
条件:

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
子句进行比较,其中使用了三个equals,又称case equal:

case mail
when MailClass then ...
end

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

如果您想要确切替代
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
子句进行比较,其中使用了三个equals,又称case equal:

case mail
when MailClass then ...
end

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

不需要
return
,在这两种情况下,它都是Ruby中隐含的。还有,什么“不起作用”?会发生什么?此外,这可能有助于理解发生了什么:它不是一个复制品,当然是。如果你阅读了这个问题中投票率最高的答案,你就会明白为什么你的代码没有按预期工作。您正在使用
case表达式
表单,并希望它的行为与更简单的
case
表单相同。它还回答了您关于如何修复它的另一个问题,因此它肯定是重复的。不需要
return
,在这两种情况下,它在Ruby中都是隐式的。还有,什么“不起作用”?会发生什么?此外,这可能有助于理解发生了什么:它不是一个复制品,当然是。如果你阅读了这个问题中投票率最高的答案,你就会明白为什么你的代码没有按预期工作。您正在使用
case表达式
表单,并希望它的行为与更简单的
case
表单相同。它还回答了你关于如何修复它的其他问题,因此它绝对是一个副本。非常感谢。正是我要找的。非常感谢。正是我在寻找的。