Why do I get variable is unused when using it in case do?

Hi,

I am trying to apply different calculations depending on gender using ‘case do’ however I get variable "user_bmr" is unused. What am I not understanding?

def show(conn, %{"id" => id}, current_user) do
    bmr = Cpm.get_user_bmr!(current_user, id)
    case bmr.sex do
      "Female" -> user_bmr = (9.99 * bmr.weight + 6.25 * bmr.height - 4.92 * bmr.age) - 161
      "Male" -> user_bmr = (9.99 * bmr.weight + 6.25 * bmr.height - 4.92 * bmr.age) + 5
    end
    render(conn, "show.html", bmr: bmr, user_bmr: user_bmr)
  end

case is an expression that “returns” the last line evaluated. You don’t have to put the user_bmr variable in case, since, if I’m not mistaken, it only exists in the scope of case. Instead you can do it this way:

user_bmr =
    case bmr.sex do
        "Female" -> (9.99 * bmr.weight + 6.25 * bmr.height - 4.92 * bmr.age) - 161
        "Male" -> (9.99 * bmr.weight + 6.25 * bmr.height - 4.92 * bmr.age) + 5
    end

render(conn, "show.html", bmr: bmr, user_bmr: user_bmr)
4 Likes

Thank you for showing me the way! I understand now and it did help :slight_smile: