Если я храню все в одном файле и добавляю две строки в ваш код, он отлично работает на 1.9.2:
class ClassA
def initialize
end
def printClassA
puts "This is class A"
end
end
class ClassB
def initialize
end
def printClassB
puts "This is class B"
end
end
class ClassC
def initialize
end
def bothClasses
a = ClassA.new
b = ClassB.new
a.printClassA
b.printClassB
end
end
c = ClassC.new
c.bothClasses
# >> This is class A
# >> This is class B
Это говорит о том, что код в порядке, проблема в том, что вы включили файлы.
Я разделил первые два класса на отдельные файлы, «classa.rb» и «classb.rb» соответственно, затем изменил файл на:
require_relative './classa'
require_relative './classb'
class ClassC
def initialize
end
def bothClasses
a = ClassA.new
b = ClassB.new
a.printClassA
b.printClassB
end
end
c = ClassC.new
c.bothClasses
После запуска я получил те же результаты, показывая, что он работает правильно.
Я использую «./path/to/file», потому что он самодокументируется там, где я ищу, но «путь / к / файлу», или, в этом случае, «classa» также подойдет.
Затем я переключился на Ruby 1.8.7, изменил строки require_relative
на require
и снова сохранил файл. Запуск из командной строки снова сработал правильно:
require './classa'
require './classb'
class ClassC
def initialize
end
def bothClasses
a = ClassA.new
b = ClassB.new
a.printClassA
b.printClassB
end
end
c = ClassC.new
c.bothClasses
В целях безопасности Ruby 1.9+ удалил текущий каталог '.' из списка каталогов, найденных по require
. Поскольку они знали, что мы будем охотиться на них с помощью вил и факелов, они добавили команду require_relative
, которая позволяет выполнять поиск в текущем каталоге и ниже.