Rubymonk攀登课程:“;“撕心裂肺”;

Rubymonk攀登课程:“;“撕心裂肺”;,ruby,Ruby,从Rubymonk上升教程“”,这段代码之间的区别是什么:(我的) 给出了解决方案: def compute(ary) return nil unless ary ary.map { |(a, b)| !b.nil? ? a + b : a } end 我的代码没有通过测试,但解决方案通过了。不过,他们看起来做的事情是一样的。我做错了什么?如果b.nil?为false,则以下行: a if b.nil? 计算结果为nil。因为这是块中的最后一条语句,所以这是从块返回的值。它不会看到n

从Rubymonk上升教程“”,这段代码之间的区别是什么:(我的)

给出了解决方案:

def compute(ary)
  return nil unless ary
  ary.map { |(a, b)| !b.nil? ? a + b : a }
end

我的代码没有通过测试,但解决方案通过了。不过,他们看起来做的事情是一样的。我做错了什么?

如果
b.nil?
为false,则以下行:

a if b.nil?
计算结果为
nil
。因为这是块中的最后一条语句,所以这是从块返回的值。它不会看到
nil
并返回前一行的值,或者完全“跳过”该行,因为
如果不为真,它只返回
nil


如果您对做某事而不是返回值感兴趣,那么我认为您的代码将做与给定解决方案相同的事情。语句
a
a+b
不会被评估,除非它们是您感兴趣的结果(如果它们是执行外部操作的方法调用,这一点很重要)。

如果
b.nil?
为false,则以下行:

a if b.nil?
计算结果为
nil
。因为这是块中的最后一条语句,所以这是从块返回的值。它不会看到
nil
并返回前一行的值,或者完全“跳过”该行,因为
如果不为真,它只返回
nil


如果您对做某事而不是返回值感兴趣,那么我认为您的代码将做与给定解决方案相同的事情。语句
a
a+b
不会被评估,除非它们是您感兴趣的结果(如果它们是执行外部操作的方法调用,这一点很重要)。

如果读者不清楚,则行
a+b除非b.nil?
无效,因为它没有赋值,也不是执行的最后一行。如果读卡器不清楚,除非b.nil?
a+b没有效果,因为它没有赋值,也不是执行的最后一行。