有没有办法从超类中进行相对路径引用?

时间:2010-03-11 11:40:27

标签: ruby file

我正在开发两个Ruby宝石,一个是框架,另一个是应用程序。 我的主应用程序类继承自框架类。

框架中定义的类有一些依赖于_____FILE_____的文件加载方法,因此子类可以相对于它们的路径加载资源。

我想要的是让子类能够使用父级中定义的那些方法而不(基本上)触及它们。有可能吗?

问题在于_____FILE_____,如果代码是从子类调用的,它不会改变,所以加载资源方法“卡在”框架目录中,而不是尝试从app dirs加载。

我知道我可以在子类中重新定义这些方法,但我想利用它们已经在父类中定义。

我希望子类使用父级中定义的方法引用自己的目录(子类文件所在的位置),这就是问题所在。

或者我必须手动设置app目录吗?


我会试着让它更清楚:

是否可以编写这样的方法:

# /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 个答案:

答案 0 :(得分:1)

正如我们所知,__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__)

说什么?

答案 1 :(得分:0)

__FILE__在代码读取期间进行转换。所以它不能改变。即使是在一个过程中。

您可以尝试使用caller方法提取信息。