我尝试编写一个名为calculate
的方法,根据传递给它的关键字参数确定add
或subtract
个数字。
这里是方法:
def add(*num)
num.inject(:+)
end
def subtract(*num)
num.reduce(:-)
end
def calculate(*num, **op)
return add(num) if op[:add] || op.empty?
return subtract(num) if op[:subtract]
end
puts calculate(1, 2, 3, add: true)
puts calculate(1, 2, 3, subtract: true)
当我运行此功能时,我得到了这个结果:
1
2
3
1
2
3
答案 0 :(得分:2)
puts
是你的朋友:
def add(*num)
puts "in add, num = #{num}, num.size = #{num.size}"
num.inject(:+)
end
def calculate(*num, **op)
puts "num = #{num}, op = #{op}"
return add(num) if op[:add] || op.empty?
end
calculate(1, 2, 3, add: true)
# num = [1, 2, 3], op = {:add=>true}
# in add, num = [[1, 2, 3]], num.size = 1
#=> nil
现在修复calculate
:
def calculate(*num, **op)
puts "num = #{num}, op = #{op}"
return add(*num) if op[:add] || op.empty?
end
calculate(1, 2, 3, add: true)
# num = [1, 2, 3], op = {:add=>true}
# in add, num = [1, 2, 3], num.size = 3
# => 6
答案 1 :(得分:0)
你写道:
return add(*num) if opt[:add] || opt.empty?
同样修改return减去..部分也是。
使用您发布的代码num变为[[1,2,3]],因此[[1,2,3]] .inject(:+)返回接收器。你打电话给它,所以它输出就像你得到的那样。