Я пытаюсь написать метод под названием calculate
, который определяет add
или subtract
номеров в зависимости от аргумента ключевого слова, переданного ему.Ruby - Уменьшить массив чисел в ruby возвращает странный результат
Here're методы:
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
@sawa сделано ли это с использованием только восклицательный знак и извлечения последнего элемента? Извините, я новичок в Ruby. –
Если вы следуете моим рекомендациям, то ваш метод будет просто 'def calculate * args, op; args.inject (case op; when: add then: +; when: subtract then: - end) end'. – sawa
Или, если вы решите, что можете пойти с 'calculate (1, 2, 3,: +)', 'calculate (1, 2, 3, :-)', тогда это будет 'def calculate * args, op; args.inject (op) end'. – sawa