加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:11:33 所属栏目:百科 来源:网络整理
导读:我有一个像这样的代码的宝石: def read(file) @file = File.new file,"r"end 现在的问题是,你有一个像这样的目录结构: app/main.rbapp/templates/example.txt 和main.rb具有以下代码: require 'mygem'example = MyGem.read('templates/example.txt') 它找
我有一个像这样的代码的宝石:
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中尝试的方式

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读