所以这是有效的,除了一个问题,它来自方法计算。我正在使用一个TDD程序,它告诉我一切正常,除了当计算通过(0,3,5)时它会插入5个选项,当它真的应该默认添加并添加所有数字到0,3,5因为选项部分为空白。我如何设置它以便删除选项,或者如果没有任何内容就传递true,以便代码通过而不添加:true或subtract:true?
def add(*numbers)
numbers.inject(0) { |sum, number| sum + number }
end
def subtract(number1,*additionalnums)
number1-add(*additionalnums)
end
def calculate(*addsubtract, options)
result = add(*addsubtract) if options[:add]
result = subtract(*addsubtract) if options [:subtract]
result = calculate.delete(-1) if options.is_a?(Symbol)
result
end
答案 0 :(得分:0)
您可以使用在Ruby 2.0中引入的named parameters(又名“关键字参数”):
def doit(*args, op: :+)
args.reduce { |t,e| t.send(op, e) }
end
doit(1, 2, 3) # => 6
doit(1, 2, 3, op: :-) # => -4
doit(1, 2, 3, op: :*) # => 6
doit(1.0, 2, 3, op: :/) # => 0.166..
doit
的来电中,那些不是表情符号。op
的默认值由op: :+
给出。这是:op => :+
的简写。 (并非所有Rubyist都赞同以前的术语。)它看起来像哈希的一个元素,是吗?事实上,这正是它的本质。
def doit(*args, op: '+')
case op
when '+', '-', '*'. '/'
args.reduce { |t,e| t.send(op.to_sym, e) }
when 'min'
args.min
when 'avg'
args.any? ? args.reduce(:+)/args.size.to_f : 0.0
when 'and_so_on'
...
end
end