我正在开发两个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?
答案 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
方法提取信息。