Я столкнулся с кодом ката, он просит реализовать метод add(n)
, который может связывать несколько чисел, а затем складывать их, например:
add(1).(2).(3).(4).(5); # => 15
Когда я только начинал, я думал, что это может включать *Метод 1005 *, поэтому я сначала сделал упрощенную версию, чтобы посмотреть, как обрабатывается *args
, когда я цепочил .(n)
после метода, который должен был возвращать целое число, я выбрал rand
, чтобы сделать это.
def method_missing(m, *args)
p m
p args
end
> rand(10).(9).(8)
# some other methods add empty array
:call
[9]
:call
[8]
=> [8]
Затем я обнаружил следующую цепочку .(n)
, просто вызвав .call
метод и взяв n
в качестве его параметра.Основываясь на другом подобном вопросе Я просто переписываю метод call
в class Integer
:
class Integer
def call(x)
self + x
end
end
def add(n)
n
end
Затем я получаю результат.
Вопрос в том, что я знал, что метод .call
обычно отправляется объекту Proc .Но здесь add(n)
(а также rand
и другие методы, возвращающие целое число) просто возвращают целое число.
Почему это может вызвать метод call
?Я что-то пропустил?