Ruby方法解释

时间:2013-10-30 18:56:36

标签: ruby methods hash splat

所以我正在研究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

1 个答案:

答案 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哈希的状态,使用您传递给此函数的相同参数返回subtractoptions的结果。

例如:

arguments = [{}, {:add => false, :subtract => true}]
如果用作参数,

会产生减法方法。