Ruby的done_recently?函数在terminatedAt为null时返回值咨询
关于Ruby布尔函数返回值的问题
你调用布尔函数的代码:
can_process = done_recently?(load)
函数定义:
def done_recently?(load) time_window = 10000 load['terminatedAt'] && (load['terminatedAt'] > time_window.minutes.ago.utc.iso8601) end
当JSON转换为哈希后,load哈希里的"terminatedAt"值为null(对应Ruby中的nil),这个函数会返回false。
原因:
Ruby的&&是短路逻辑与运算符:如果左侧表达式为假值(nil在Ruby中属于假值),会直接返回左侧的值,不会执行右侧的比较逻辑。这里load['terminatedAt']是nil,所以整个表达式直接返回nil,而在布尔判断场景下nil会被当作false处理。
另外你在irb中报错,大概率是10000.minutes.ago这个时间计算的问题,但这不影响当前场景的返回结果——因为短路求值根本不会走到这一步。
内容的提问来源于stack exchange,提问作者Priyanshu0007
相关产品推荐
相关产品推荐

