Assignments are not allowed in pattern guards, because matching cannot have side effects. Side effects could alter the matched object or the environment on which the match depends in such a way, that the match would not be exhaustive. For instance, the following would not match any arm if assignments were allowed:
match Some(()) { None => { }, option if { option = None; false } => { }, Some(_) => { } // When the previous match failed, the option became `None`. }