Какой-либо способ определить, который объект, названный методом?

Я надеюсь, что инфраструктура передачи сообщений Ruby означает, что мог бы быть некоторый умный прием для этого.

То, как я определяю вызывающий объект - которые возражают, назвало метод, в котором я в настоящее время нахожусь?

20
задан Joseph Weissman 20 April 2012 в 04:14
поделиться

3 ответа

Вы можете легко взглянуть на строку код, который вызвал интересующую функцию через

caller.first

, который сообщит вам имя файла и номер строки, которая вызвала соответствующую функцию. Затем вы могли рассчитать, какой это был объект.

Однако похоже, что вам больше нужен какой-то объект, который вызвал определенную функцию, возможно, в методе экземпляра. Я не знаю способа выяснить это, но я бы все равно не стал его использовать, поскольку он, похоже, сильно нарушает инкапсуляцию.

14
ответ дан 30 November 2019 в 00:55
поделиться

Вы имеете в виду self ?

irb> class Object
  ..   def test
  ..     self
  ..   end
  .. end
  => nil
irb> o = Object.new
  => #<Object:0xb76c5b6c>
irb> o.test
  => #<Object:0xb76c5b6c>
1
ответ дан 30 November 2019 в 00:55
поделиться

Технология в лучшем виде:

 1  # phone.rb
 2  class Phone
 3    def caller_id
 4      caller
 5    end
 6  end
 7  
 8  class RecklessDriver
 9    def initialize
10      @phone = Phone.new
11    end
12    def dial
13      @phone.caller_id
14    end
15  end
16  
17  p = Phone.new
18  p.caller_id.inspect   # => ["phone.rb:18:in `<main>'"]
19  
20  macek = RecklessDriver.new
22  macek.dial.inspect    # => ["phone.rb:13:in `dial'", "phone.rb:22:in `<main>'"]

Примечание: Номер строки для демонстрационных целей. phone.rb: X относится к строке X скрипта.

Посмотрите phone.rb: 13 ! Этот метод дозвона - это то, что отправило вызов! А phone.rb: 22 относится к безрассудному драйверу, который использовал метод набора !

2
ответ дан 30 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: