案例陈述中的分配

时间:2014-05-23 19:46:51

标签: ruby

我正在尝试在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

2 个答案:

答案 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;。从来没有这种情况