具有多个条件的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
表单相同。它还回答了你关于如何修复它的其他问题,因此它绝对是一个副本。非常感谢。正是我要找的。非常感谢。正是我在寻找的。