Лучше всего это пояснить на примере:
file1.rb:
def foo
puts 123
end
file2.rb:
class A
require 'file1'
end
A.new.foo
выдаст ошибку «': вызов частного метода' foo '».
Я могу обойти это, выполнив A.new.send ("foo")
, но есть ли способ сделать импортированные методы общедоступными?
Edit: Чтобы уточнить, я не сбиваю с толку включать и требовать. Кроме того, причина, по которой я не могу использовать нормальное включение (как многие правильно указали), заключается в том, что это часть установки метапрограммирования. Мне нужно разрешить пользователю добавлять функции во время выполнения; например, он может сказать «run-this-app --include file1.rb», и приложение будет вести себя по-разному в зависимости от кода, который он написал в file1.rb. Извините, надо было объяснить яснее.
Редактировать: Прочитав ответ Йорга, я понял, что мой код ведет себя не так, как задумано, и он отлично отвечает на мой (ошибочный) вопрос. Я пытаюсь сделать что-то более похожее на str = (весь file1.rb как строка); A.class_exec (str)
.