Всегда ли методы, импортированные из Ruby, являются закрытыми?

Лучше всего это пояснить на примере:

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) .

5
задан Andrew Grimm 27 March 2012 в 23:32
поделиться