为何当a与b相等时,该Ruby方法未返回nil?
问题解答:Ruby中get_sum方法为何在a等于b时能正确返回值?
先看你的代码实现:
def get_sum(a,b) a < b ? (a..b).sum : (b..a).sum end
当a和b相等时,a < b的判断结果是false,所以三元运算符会执行冒号右侧的(b..a).sum。
这里的核心是Ruby**闭合范围(..)**的特性:如果范围的起始值和结束值相等,这个范围仅包含一个元素——就是那个相等的值。比如5..5对应的元素集合就是[5],调用sum方法后自然返回5,完全符合需求中“当a与b相等时返回a或b”的要求。
所以完全不需要额外添加return a if a==b的判断,因为三元运算符的两个分支已经覆盖了所有场景:
- 当
a < b时,计算从a到b的所有数字之和; - 当
a >= b时(包含a == b的情况),计算从b到a的所有数字之和,而当两者相等时,这个范围的和就是它本身。
这种写法已经完美覆盖了所有情况,不会返回nil。
内容的提问来源于stack exchange,提问作者Leith
相关产品推荐
相关产品推荐

