#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. Проблема в том, что в приведенном выше коде родительский вызывает дочерний метод.