在Ruby中,我想用一个或多个带有多个nil检查的语句来做一个有条件的行。例如:
warn = my_val >= max if max or my_val <= min if min
max和/或min可能为零,所以我只想在存在一个或两个值时进行比较。有没有办法在一行中做这种类型的逻辑?
答案 0 :(得分:4)
warn = (max and my_val >= max) or (min and my_val <= min)
答案 1 :(得分:2)
假设如下:
> max = 3; min = 0; my_val = 0;
@ PardeepDhingra的答案似乎是正确的。
> warn = (max && my_val >= max) || (min && my_val <= min)
=> true
@ThomasHaratyk接受的回答似乎与这种情况存在逻辑缺陷:
> warn = max ? my_val >= max : ( min ? my_val <= min : false )
=> false
答案 2 :(得分:1)
这是一个可能的解决方案:
warn = !my_val.between? (min || -Float::INFINITY), (max || Float::INFINITY)
评论上下文的错误解决方案
# warn = max ? my_val >= max : ( min ? my_val <= min : false )
答案 3 :(得分:0)
这应该有效:
var strText = 'a<p> </p>c<p> </p>d<p> aa </p>e',
div = document.createElement('div'),
div.innerHTML = strText,
p = div.getElementsByTagName('p');
var empty_paragraph_count = 0;
for(var i=0, n=p.length; i<n; i++){
if( /^\s*$/.test( p[i].textContent ) ){
empty_paragraph_count++;
}
}
答案 4 :(得分:0)
我并不认真考虑任何人只为its try
提供ActiveSupport
来完成这么简单的任务,但我无法提出建议。它让我想起了解决所有问题的旧的&#34; jQuery方法。看起来几乎可读。
warn = max.try(:>=, my_val) || min.try(:<=, my_val)
以防它不够清楚:除非你已经在使用它(在Rails中或出于其他原因),否则不要仅仅为此拉入ActiveSupport。但是,如果您喜欢可读性,则可以添加ActiveSupport,并且只需active_support/core_ext/object/try
即可获得最小的内存占用。
答案 5 :(得分:0)
由于我无法使用原来的答案,让我尝试一下现实生活中的答案:
def doit(min, max, my_value)
case [min.nil?, max.nil?]
when [false, false] then my_value <= min || my_value >= max
when [false, true ] then my_value <= min
when [true, false] then my_value >= max
when [true, true ] then false
end
end
doit 5,7,8 #=> true
doit 5,7,4 #=> true
doit 5,7,6 #=> false
doit nil,7,8 #=> true
doit 5,nil,4 #=> true
doit 5,nil,8 #=> false
doit nil,nil,4 #=> false