Skip to content

‘if … else if’ expression unexpectedly has Unit value when last branch taken #14914

Closed
@djneades

Description

@djneades

Compiler version

3.1.1

Minimized code

This code prints (), as a evaluates to the Unit value:

 val a =
    if false then
       1
    else if true then
       2
 
 println(a)

Update: this code may be a bit too minimized to demonstrate the scope of the actual problem. See the examples in this comment for more clarity.

Output

()

Expectation

Although this code is unusual and unlikely to be written by an experienced programmer (it is a simplified and minimized version of something written by my 8-year-old son who has just started learning to program with Scala), I suspect most people would intuitively expect a to evaluate to 2 rather than to ().

Adding an unconditional else clause to the if statement restores expected behaviour:

val a =
    if false then
       1
    else if true then
       2
    else
       3
 
 println(a) // prints 2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions