4
按位与运算的假设我有一个数字的简单列表,像: 使用过滤器
val numbers = List.range(1,10)
而且我要对其进行过滤,使用&运营商 - 这似乎是工作在最短的解决方案是:
numbers.filter(x => (x & 1) == 0)
但是我不知道为什么我需要()在这里,或X,但它似乎给我下面的错误,否则(这似乎&是一个问题,但我不知道如何查找它在文档):
//
// overloaded method value & with alternatives:
// (x: Long)Long <and>
// (x: Int)Int <and>
// (x: Char)Int <and>
// (x: Short)Int <and>
// (x: Byte)Int
// cannot be applied to (Boolean)
// numbers.filter(_ & 1 == 0)
//
numbers.filter(_ & 1 == 0)
也是另一个令人困惑的部分,是%运算工作得很好。
// --- all good
numbers.filter(_ % 2 == 0)
// --- error
//
// type mismatch;
// found : Int
// required: Boolean
// numbers.filter(_ & 1)
//
numbers.filter(_ & 1)
那么,为什么 “X%2 == 0” 的工作, “×& 1 == 0” 失败,因为它们产生类似的结果(我认为)。如果我正确理解错误 - “x & 1”的结果是一个整数。我认为这与&运营商有关,但无法弄清楚我在哪里查找它。
斯卡拉:2.10
预先感谢您的帮助和任何建议。
由于操作者的优先级; '=='比'&'具有更高的优先权,所以'x&1 == 0'表示'x&(1 == 0)'而不是'(x&1)== 0'。 – Jesper