所以我正在研究rubymonk网站上的一些Ruby方法示例,并且在解释下面代码中发生的事情时遇到了麻烦。更具体地说,我希望有人能够用外行的术语帮助解释"计算"方法代码中的每一行所描述的内容?我真的很感激任何和所有的帮助!
def add(*numbers)
numbers.inject(0) { |sum, number| sum + number }
end
def subtract(*numbers)
sum = numbers.shift
numbers.inject(sum) { |sum, number| sum - number }
end
def calculate(*arguments)
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
options[:add] = true if options.empty?
return add(*arguments) if options[:add]
return subtract(*arguments) if options[:subtract]
end
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
创建一个名为 options
的新哈希。这将分配给参数数组中的最后一个元素,或者如果不是哈希,则将其分配给空元素。在 ruby 中,像 python 一样,使用 -1 作为数组索引可以得到数组中的最后一个元素。
options[:add] = true if options.empty?
如果刚刚创建的哈希为空,请将哈希中与键:add
匹配的值设置为 true。
return add(*arguments) if options[:add]
return subtract(*arguments) if options[:subtract]
根据刚刚创建的 options
哈希的状态,使用您传递给此函数的相同参数返回 add
或 subtract
的结果。
例如:
arguments = [{}, {:add => false, :subtract => true}]
如果用作参数,将诱导减法。