/ / Jak potrzebować pliku bez definiowania jego stałych w Object w Ruby? - rubin

Jak mogę wymagać pliku bez definiowania jego stałych w Object in Ruby? - rubin

Chciałbym wymagać pliku w Ruby bezdefiniowanie stałych tego pliku w Object. Zamiast tego chciałbym uwzględnić je tylko w module wymaganego pliku. Na przykład, jeśli mam plik foo.rb, który wygląda następująco:

module Foo
def self.hello_world
puts "Hello, World."
end
end

Reprezentacja wyniku, który mam nadzieję osiągnąć, wygląda mniej więcej tak:

module Bar
require_relative "./foo.rb"
end

Foo.hello_world
# NameError: uninitialized constant Foo

Bar::Foo.hello_world
# Hello, World.

Wygląda na to, w jaki sposób rzeczy są potrzebneRuby, wszystko zdefiniowane na najwyższym poziomie innego pliku będzie zdefiniowane jako stała w Object, a zatem globalnie dostępne. Mam problem, ponieważ potrzebuję czegoś z pliku, który powoduje konflikt ze stałą w globalnej przestrzeni nazw.

Zdaję sobie sprawę, że ten problem może być fundamentalny dla Ruby, ale czy jest możliwe zastosowanie techniki metaprogramowania w celu rozwiązania tego problemu?

Odpowiedzi:

1 dla odpowiedzi № 1

Wygląda na to, że następujący fragment kodu działa w przypadku tego, co próbuję zrobić:

module Bar
class_eval File.open("./foo.rb").read
end

Być może wciąż czegoś mi brakuje.


0 dla odpowiedzi nr 2

Jeśli nie potrzebujesz dostępu do przodka, szukasz tego extend

module Foo
def hello_world
puts "Hello, World."
end
end

module Bar
extend Foo
end


Bar.hello_world