gpt4 book ai didi

scala - 在过滤器中使用按位 AND 运算符

转载 作者:行者123 更新时间:2023-12-05 00:17:58 24 4
gpt4 key购买 nike

假设我有一个简单的数字列表,例如:

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”会起作用,而“x & 1 == 0”会失败,因为它们会产生相似的结果(我认为)。如果我正确理解错误 - “x & 1”的结果是一个整数。我认为这与 & 运算符有关,但不知道在哪里查找。

斯卡拉:2.10

在此先感谢您的帮助和任何建议。

最佳答案

运营商 %&有不同的优先级。所以_ & 1 == 0尝试将 1 与 0 进行比较,然后执行 &在 bool 结果上。

Scala Reference - 6.12.3 Infix Operations :

优先级递增:

(all letters)
|
^
&
= !
< >
:
+ -
* / %
(all other special characters)

关于scala - 在过滤器中使用按位 AND 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com