2016-03-23 4 views
3

Я пытаюсь использовать класс из другого файла.Как вы используете класс из другого файла?

something.rb

class Something 
    def initialize 
    end 
    def getText 
    'Some example text' 
    end 
end 

another.rb

class Another 
end 

somethingVar = Something.new 
puts somethingVar.getText 

Это дает мне ошибку

/usr/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /home/chris/RubymineProjects/untitled1/another.rb 
/home/chris/RubymineProjects/untitled1/another.rb:4:in `<top (required)>': uninitialized constant Something (NameError) 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

Что я делаю неправильно?

+0

ли рельсы проекта? Если это не так, вам нужно будет потребовать файл, содержащий определение, прежде чем вы сможете его использовать. – BroiSatse

+0

@ Крис, если вы чувствуете, что на вопрос ответили, это хорошая идея отметить этот ответ, как принято. –

ответ

4

Наиболее распространенный способ использования кода, как это через require:

require 'something.rb' 

..will позволяют использовать классы, определенные в этом файле, но только если файл можно найти либо в путь загрузки Ruby или связанный с установленным камнем.

Если вы хотите, чтобы написать свой собственный, особенно для тестирования или краткосрочного взлома, вы, вероятно, хотите использовать require_relative, который принимает относительный путь к файлу, который хотите использовать:

require_relative './something.rb'` 

Это должно работать, если something.rb находится в том же каталоге, что и другой. Rb

Дополнительная информация о различных способах повторного использования кода в Ruby находится в here.

+1

require_relative works! Спасибо. –

+0

Чтобы выполнить nitpick, «require» также будет работать, если вы дадите ему абсолютный путь от корня файловой системы. Но прочитайте последнюю ссылку для по-настоящему полного понимания. –

+2

Вам не нужно (и это обычная практика, чтобы опустить) расширение в вызовах require/require_relative –

5

Вы должны потребовать что-то. Rb.

require 'something.rb' 
+0

Первоначально я думал, что, но если я поместил это в начало another.rb, я получаю следующую ошибку: в 'require ': не может загрузить такой файл - что-то (LoadError) –

+0

Попробуйте' require'./Something'' , –

+0

Это не сработает, так как '.' (текущий каталог) не находится в' $ LOAD_PATH'. 'require_relative' - это путь. – DMKE

0

ПРИМЕЧАНИЕ. Чрезвычайно распространено видеть требуемое имя файла БЕЗ расширения .rb, как показано в примерах ниже.

Как указывали другие, вы должны требовать «что-то», если на одном пути нагрузки.

require 'something' 

или require_relative './something' путем включения пути к файлу.

require_relative 'something' 

«Помимо ищет лучше, это bareword способ ссылки на продление необходимо, потому что не все расширения используют файлы, заканчивающиеся в .rb. В частности, расширения, написанные на C, хранятся в файлах, оканчивающихся .so или. dll. Чтобы обеспечить прозрачность процесса, то есть, чтобы избавить вас от необходимости знать, требуется ли расширение, которое вы хотите использовать .rb-файл или нет, Ruby принимает одно слово и затем выполняет автоматический поиск файлов и тестирование возможных имен файлов до тех пор, пока он находит файл, соответствующий запрашиваемому вами расширению ».

Для получения дополнительной информации - http://rubylearning.com/satishtalim/including_other_files_in_ruby.html

Смежные вопросы