我有两个数字,X和Y,我想断言X是Y的倍数 - 即,我想断言存在一些任意整数n,使Y * n == X。
如果Y保证大于零,我可以写
assert!(x % y == 0)
但就我而言,Y可能为零。如果Y为零,那么X也必须为零,所以我可以写
if y == 0 {
assert!(x == 0);
} else {
assert!(x % y == 0);
}
但这是5行长,并且与assert的单个分支有两个分支。有可能以优雅的方式在一行中完成这项工作吗?
答案 0 :(得分:5)
if
is an expression in Rust,所以你可以写
assert_eq!(0, if y == 0 { x } else { x % y });
如评论中所述,您也可以写
assert!(y == 0 && x == 0 || x % y == 0);
但if
表达式方法更为通用。
您也可以use checked_rem
x.checked_rem(0) == None
,但这不会比if
表达式简单。
assert_eq!(0, x.checked_rem(y).unwrap_or(x));