-1

所以我正在研究 ruby ​​monk网站上的一些 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
4

1 回答 1

1
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]

根据您刚刚创建的哈希的状态,返回addsubtract使用您传递给此函数的相同参数的结果。options

例如:

arguments = [{}, {:add => false, :subtract => true}]

如果用作您的参数,将引入减法方法。

于 2013-10-30T19:00:00.333 回答