如何评估布尔值数组和逻辑运算符

是的

我有一个布尔值数组truefalse由表示逻辑运算符||or的字符串分隔&&,例如:

[true, "||", false, "&&", true]

数组大小不固定。我想评估前三个元素[true, "||", false],并评估结果加上数组的剩余艺术。

我正在考虑使用:

array.each_slice(3).to_a.reduce

但我不确定要在reduce块中传递什么这里需要一些指导。

卡里·斯沃夫兰

代码

def evaluate(arr)
  pairs = arr.drop(1).each_slice(2)
  pairs.reduce(arr.first) { |rv, (op, bool)| op == '&&' ? rv && bool : rv || bool }
end

例子

evaluate [true, '&&', false, '||', true]   #=> true
evaluate [false, '||', true, '&&', false]  #=> false

解释

认为

arr = [true, '&&', false, '||', true]

然后

a = arr.drop(1)         #=> ["&&", false, "||", true]
pairs = a.each_slice(2) #=> #<Enumerator: ["&&", false, "||", true]:each_slice(2)>

我们可以pairs通过将其转换为数组来查看枚举器将向块发送哪些元素

pairs.to_a              #=> [["&&", false], ["||", true]]

继续(返回值的rv缩写),我们生成 的第一个元素,将其传递给块并将值分配给块变量pairsopbool

rv = arr.first          #=> true
op, bool = pairs.next   #=> ["&&", false]
op                      #=> "&&"
bool                    #=> false

我们现在执行块计算。作为

op == '&&'              #=> true

块计算并返回以下,这是的新值备忘录rv

rv && bool              #=> true && false => false

我们现在生成 的第二个和最后一个元素pairs,将其传递给块,为块变量赋值(rv现在回忆一下等于false)并执行块计算。

op, bool = pairs.next   #=> ["||", true]
op                      #=> "||"
bool                    #=> true

op == '&&'              #=> false
rv || bool              #=> false || true #=> true

因此该方法返回true

使用内核#EVAL代替

如果我们信任数组中的值,我们可以简单地写

eval [true, '&&', false, '||', true].join  #=> true
eval [false, '||', true, '&&', false].join #=> false

采用eval将允许我们添加"("")" and“!”`到阵列中,大大增加了,可以进行评估(容易)布尔表达式的范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用逻辑运算符索引numpy数组

来自分类Dev

python中的逻辑运算符“和”

来自分类Dev

C运算符的优势:递增和逻辑运算符

来自分类Dev

十六进制数和逻辑运算符

来自分类Dev

如何使用逻辑运算符访问和更改Python数组?

来自分类Dev

这些逻辑运算符如何工作?

来自分类Dev

是否可以基于布尔值在逻辑运算符之间进行交换?

来自分类Dev

在条件中使用逻辑运算符和比较运算符(javascript)

来自分类Dev

如何使用逻辑运算符JavaScript或jQuery

来自分类Dev

如何在python中使用逻辑运算符

来自分类Dev

了解'| '和'&'运算符行为(R的逻辑运算符)

来自分类Dev

变量python中的逻辑运算符'or'和'and'

来自分类Dev

用逻辑运算符返回值

来自分类Dev

如何在Scala中的布尔值上定义自己的逻辑运算符

来自分类Dev

&&逻辑运算符jsx和Typescript错误

来自分类Dev

在Java中如何评估带有逻辑运算符的表达式?

来自分类Dev

用逻辑运算符索引numpy数组

来自分类Dev

函数数组上的逻辑运算符

来自分类Dev

逻辑运算符的行为如何?

来自分类Dev

PEGJS:如何向语法AND和(&&)或(||)逻辑语句的语法中添加NOT(!)逻辑运算符

来自分类Dev

C运算符的优势:增量运算符和逻辑运算符

来自分类Dev

增量和逻辑运算符优先级

来自分类Dev

JavaScript逻辑运算符和赋值?

来自分类Dev

逻辑运算符

来自分类Dev

如何返回AND和OR逻辑运算符JavaScript

来自分类Dev

如何组合分组依据,位置和逻辑运算符?

来自分类Dev

如何简化PHP逻辑运算符?

来自分类Dev

多个连接和逻辑运算符

来自分类Dev

逻辑运算符和增量运算符