检查X是否是Y的倍数,其中Y可能为零

时间:2017-03-17 05:34:53

标签: rust

我有两个数字,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的单个分支有两个分支。有可能以优雅的方式在一行中完成这项工作吗?

1 个答案:

答案 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));