我的代码:
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语句?
提前致谢。
答案 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)
。