获取实例化类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中尝试的方式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |