获取实例化类ruby的文件目录

前端之家收集整理的这篇文章主要介绍了获取实例化类ruby的文件目录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个像这样的代码的宝石:
def read(file)
    @file = File.new file,"r"
end

现在的问题是,你有一个像这样的目录结构:

app/main.rb
app/templates/example.txt

和main.rb具有以下代码

require 'mygem'

example = MyGem.read('templates/example.txt')

它找到了File Not Found:templates / example.txt.如果exam​​ple.txt与main.rb位于同一目录中,但如果它位于目录中则不行.为了解决这个问题,我在read()中添加了一个名为relative_to的可选参数.这需要一个绝对路径,所以上面可能需要:

require 'mygem'

example = MyGem.read('templates/example.txt',File.dirname(__FILE__))

这很好,但我觉得它有点难看.反正有没有这样做,所以类知道什么文件read()被调用并根据它来计算路径?

解决方法

有一个有趣的图书馆 – i told you it was private.人们可以保护他们的方法免受外界的呼叫.代码查找调用方法文件并将其删除.使用此行找到罪犯:
offender = caller[0].split(':')[0]

我想你可以在你的MyGem.read代码中使用它:

def read( file )
  fpath = Pathname.new(file)
  if fpath.relative?
    offender = caller[0].split(':')[0]
    fpath = File.join( File.dirname( offender ),file )
  end
  @file = File.new( fpath,"r" )
end

这样你可以使用相对于你的Mygem调用者而不是pwd的路径.正是你在app / main.rb中尝试的方式

原文链接:https://www.f2er.com/ruby/270268.html

猜你在找的Ruby相关文章