是否有写这两个逻辑条件的简写方法?
if array[index] > array[index - 1] && array[index] > array[index + 1]
类似于:
if array[index - 1] < array[index] > array[index + 1]
答案 0 :(得分:1)
显然,如果您尝试执行if array[index - 1] < array[index] > array[index + 1]
,则会收到未定义的方法错误,因为您在FalseClass对象中使用>
,并且此类不会出现这种情况。 t实现也不是<
也不是>
方法。所以,你会有类似的东西:
if true > array[index + 1]
...
end
# undefined method `>' for true:TrueClass (NoMethodError)
这适用于任何&#34;单身&#34;试图完成比较任何一方的对象。
array[index] > array[index - 1] && array[index] > array[index + 1]
这可以解释为验证,如果两个或所有对象都小于array[index]
,所以我猜你可以使用Enumerable#all?
,它比较数组中的所有元素并返回true在块内进行比较,如果&#34; all&#34;元素满足它。
如果您出于某种原因需要在比较中添加更多元素,并且不关心它所创建的复杂逻辑,那么这将是一种替代方案。
所以,像这样的东西可以写成:
p 'foo' if [array[index - 1], array[index + 1]].all? { |element| element < array[index] }
p 'foo' if array[index] > array[index - 1] && array[index] > array[index + 1]
最终会有更多代码,但是如果你需要在表达式中添加一些东西,那么它就会在数组内部进行。
答案 1 :(得分:0)
我能想到的最接近的是:
if [array[index - 1], array[index], array[index + 1]].max == array[index]
编辑:或使用添加到同一方法中的范围选择:
if array[index-1..index+1].max == array[index]