Есть ли способ сделать ссылки относительного пути из суперкласса? - PullRequest
0 голосов
/ 11 марта 2010

Я разрабатываю два драгоценных камня Ruby, один - фреймворк, другой - приложение. Класс моего основного приложения наследуется от класса фреймворка.

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

То, что я хочу, это чтобы подклассы могли использовать те методы, которые определены в родителе, без (в основном) касания их. Возможно ли это?

Проблема с _____FILE_____, она не меняется, если код вызывается из подкласса, поэтому методы загрузки ресурсов «застряли» в каталоге frameworks, вместо того, чтобы пытаться загрузить из директорий приложения.

Я знаю, что могу переопределить эти методы в подклассе, но я хотел воспользоваться тем, что они уже определены в родительском.

Я хочу, чтобы подклассы ссылались на свой собственный каталог (где находится файл подкласса), используя метод, определенный в родительском объекте, вот в чем проблема.

Или я должен установить каталог приложения вручную?


Я постараюсь прояснить это:

Можно ли написать такой метод:

# /home/usr/framework/parent.rb
class Parent
  def show_my_path
    puts File.dirname(__FILE__)
  end
end

# /home/usr/app/app.rb
# require Parent
class App < Parent
end
App.new.show_my_path
# Can we have here /home/usr/app
# instead of /home/usr/framework ?
# What's the right way to do this?

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Как мы знаем, __FILE__ будет иметь текущее имя файла, каким бы оно ни было. так что вы можете попробовать это -

# /home/usr/framework/parent.rb
class Parent
  def show_my_path(filename)
    puts File.dirname(filename)
  end
end

# /home/usr/app/app.rb
# require Parent
class App < Parent
end
App.new.show_my_path(__FILE__)

Что скажете?

0 голосов
/ 11 марта 2010

__FILE__ - преобразование во время чтения кода. Так что это не может быть изменено. Даже в процессе.

Вы можете попытаться извлечь информацию с помощью метода caller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...