Koan Neo.rb — вызов методов из метаданных

#ruby

#ruby

Вопрос:

я просматриваю логику Koans (файл Neo.rb).

Я не понимаю одну вещь. В методе Koan.meditate называется методом отправки (имени). Имя параметра содержит имя оцениваемого метода. Но есть точка .. метод находится в одном из многих наследуемых классов (например: class arrays < Neo), поэтому метод не должен быть виден для методов Neo. Но это так.

Может кто-нибудь, пожалуйста, объяснить мне, почему метод meditate имеет доступ к методам унаследованных классов?

Спасибо,

M.


Но это определенно наоборот @maxpleaner ..

 class AboutAsserts < Neo::Koan
  # We shall contemplate truth by testing reality, via asserts.
  p Neo::Koan.subclasses
  def test_assert_truth
    assert true                # This should be true
  end
-------------------------
class Koan
    attr_reader :name, :failure, :koan_count, :step_count, :koan_file
    def initialize(name, koan_file=nil, koan_count=0, step_count=0)
      @name = name
      @failure = nil
      @koan_count = koan_count
      @step_count = step_count
      @koan_file = koan_file
    end

    def failed(failure)
      p "MSK FAILED"
      @failure = failure
    end
    def meditate
      setup
      begin
        send(name) # here is called child method of AboutAsserts which is called test_assert_truth
        p "send(name)"
  

Если я правильно понимаю, родителем является Koan, а дочерним — AboutAsserts … так что не уверен, почему метод виден для родительского..

Комментарии:

1. Даже если метод определен в родительском классе, когда он вызывается из дочернего, self он равен дочернему. С send(name) неявным self , поэтому его можно переписать как self.send(name ). Как я уже упоминал self , может быть дочерним. На самом деле нет отдельных родительских и дочерних экземпляров. Дочерний элемент наследует от родительского, что означает, что он сам получает всю функциональность родительского элемента.

2. Кроме того, в будущем, пожалуйста, включите все соответствующие части кода, необходимые для ответа на ваш вопрос. Мне пришлось искать Koan в Google, и большинство ответчиков не захотят этого делать. Итак, вы должны скопировать и вставить код в свой вопрос (обязательно нажмите кнопку, чтобы отформатировать его как код).

3. Проблема в том, что в приведенном выше коде родительский вызывает дочерний метод.