P
P
Philip Dmitrov2016-05-20 22:34:43
ruby
Philip Dmitrov, 2016-05-20 22:34:43

How to find out the parameters of the next method in the chain?

class A
  def method1
    self
  end
  def method2(value)
    value
  end
end

How can you make it so that when you call
p A.method1
, let's say 100 is displayed, and when you call,
p A.method1.method2(10)
only 10?
For example, if this is unloading records from the database, when accessing method1, get all the records, and method2 only 10, without unloading the rest?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
Евгений Кунгуров, 2016-05-21
@evgenykungurov

Ваш пример, во-первых не работает, т.к. методы вы сделали не классовыми(нужно self.method), во вторых второй метод будет срабатывать к значению, который вернет первый метод, допустим это будет число, тогда второй метод будет срабатывать к классу Integer, и выйдет ошибка нет такого метода2 для класса Integer. Выход использовать технику monkey patching. Не думаю, что это хорошая идея для вашего примера, т.к то, что вы хочете уже реализовано в Active Record, что мешает вам сделать например так User.first(10) например, можно и по другому . Просто научитесь правилтно составлять запросы в гугл, поверьте там все есть по вашей теме

V
Viktor Vsk, 2016-09-04
@viktorvsk

AR (собственно, в данном случае, гем Arel) формирует SQL, который уже и будет отдан базе. А 100 или 10 объектов будет возвращено уже зависит от сформированного запроса.
То, что вы предлагаете реализовать бессмысленно.
Хотя и возможно. Просто при вызове каждого метода нужно сохранять его значение в переменной инстанса, например. Нет (по крайней мере, никто не использует) каких-либо "цепочек вызова предыдущих методов на уровне Ruby".
И, кстати, то, что вы описали, больше подходит под Aspect Oriented Programming

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question