我正在尝试在when-then语句中做一个赋值,但它不能像我预期的那样工作。正如我所看到的那样,问题是因为,或许,情况或时间范围与功能不同。那么,我如何引用我的变量message_header
来编写正确的赋值?还是其他东西?
def message_notice(type, notice)
message_header = ""
case 'type'
when 'danger' then message_header = 'Oops, something wrong happened'
when 'success' then message_header = 'Done'
when 'warning' then message_header = 'Hey, be careful'
when 'info' then message_header = 'News, news'
end
return "<strong>#{message_header}!</strong> #{notice}"
end
答案 0 :(得分:3)
case 'type'
需要
case type
您为案例提供了一个常量字符串'type'
,而不是变量type
。您的when
都不会匹配,因为它们都不等于字符串'type'
。
您还可以通过从每个分支中删除所有相同的分配来清除这一点。所有内容都计算为Ruby中的值,因此case语句将从选择的任何分支返回值。
def message_notice(type, notice)
message_header = case type
when 'danger' then 'Oops, something wrong happened'
when 'success' then 'Done'
when 'warning' then 'Hey, be careful'
when 'info' then 'News, news'
end
"<strong>#{message_header}!</strong> #{notice}"
end
您甚至可能希望更进一步,只需将类型/消息存储为简单的映射:
def message_notice(type, notice)
messages = {
'danger' => 'Oops, something wrong happened',
'success' => 'Done',
'warning' => 'Hey, be careful',
'info' => 'News, news'
}
"<strong>#{messages[type]}!</strong> #{notice}"
end
答案 1 :(得分:0)
删除&#39; &#39;围绕case语句中的类型。 您正在检查您的某个“危险&#39;成功&#39; ...”字符串是否等于&#39;类型&#39;。从来没有这种情况