Вызов частного метода экземпляра от метода класса в Ruby

15
задан Andrew Grimm 27 March 2012 в 23:37
поделиться

3 ответа

Используя частный или защищенный действительно не делают так многого в Ruby. Можно звонить, отправляют на любом объекте и используют любой метод, который он имеет.

class Foo
  def Foo.bar(my_instance, n)
    my_instance.send(:plus, n)
  end
end
18
ответ дан 1 December 2019 в 01:39
поделиться

Можно сделать это, поскольку Samuel показал, но это действительно обходит проверки OO...

В Ruby можно отправить закрытые методы только для того же объекта и защищенный только к объектам того же класса. Статические методы находятся в метаклассе, таким образом, они находятся в другом объекте (и также другом классе) - таким образом, Вы не можете сделать, поскольку требуется использовать или частный или защищенный.

9
ответ дан 1 December 2019 в 01:39
поделиться

Вы могли также использовать instance_eval

class Foo
  def self.bar(my_instance, n)
    my_instance.instance_eval { plus(n) }
  end
end
7
ответ дан 1 December 2019 в 01:39
поделиться