У меня есть сторонний код, который походит на это:Возможно ли в Ruby переопределить метод инициализации?
class Foo
def initialize
@hello = "world"
end
def msg
@hello
end
end
Затем я добавил новый файл foo_redefinition.rb
с этим содержимым
class Foo
def initialize
@hello = "welt"
end
end
Затем другой код третьей стороны вызывает метод в мой основной класс, а в файле моего основного класса я делаю require_relative 'foo_redefinition'
. Однако, когда код третьей стороны (после вызова моего метода, таким образом, считывая мой основной файл, который требует переопределения) вызывает Foo.msg, он возвращает «мир», а не «welt».
Кроме того, когда я
require_relative 'foo_redefinition'
# ... lots of code
Foo::new.msg #=> world (instead of welt)
Мои вопросы:
- Можно ли переопределить метод инициализации?
- Если да, то что я делаю неправильно здесь?
'initialize' - это метод, как и любой другой метод. В этом нет ничего особенного. Итак, ваш вопрос: могу ли я переопределить методы? И ответ: да. Ответ на ваш второй вопрос: я не знаю. В вашем сообщении недостаточно информации. –
Я предполагаю, что я переопределяю инициализацию после того, как экземпляр, который я хотел изменить (и к которому у меня нет никакого доступа) уже был инициализирован, поэтому изменение происходит, но не имеет никакого эффекта. –
Ответы на ваши вопросы: 1) да; 2) Я понятия не имею, не видя полного примера, который работает так, как вы описываете. –