Как метод .call может быть вызван возвращающим целым числом в Ruby? - PullRequest
0 голосов
/ 06 июня 2018

Я столкнулся с кодом ката, он просит реализовать метод 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?Я что-то пропустил?

1 Ответ

0 голосов
/ 06 июня 2018

.() - это просто сокращение для .call() Да, метод call обычно используется для запуска объектов proc, но это не делает его чем-то особенным, просто обычный метод, реализованный объектом proc.Если вы определите, что он делает что-то еще, ярлык будет работать как обычно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...