所以我正在研究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
答案 0 :(得分:1)
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
创建一个名为options
的新哈希。这将被分配给arguments数组中的最后一个元素,如果不是散列,则为空元素。在ruby中,就像python一样,使用-1作为数组索引可以获得数组中的最后一个元素。
options[:add] = true if options.empty?
如果您刚刚创建的哈希为空,请将哈希中与键:add
匹配的值设置为true。
return add(*arguments) if options[:add]
return subtract(*arguments) if options[:subtract]
根据您刚刚创建的add
哈希的状态,使用您传递给此函数的相同参数返回subtract
或options
的结果。
例如:
arguments = [{}, {:add => false, :subtract => true}]
如果用作参数,会产生减法方法。