ruby - 导入文件中的 __FILE__ 变量

标签 ruby

我在两个不同的目录中有两个文件:

module MyModule
  def my_method path
    p File.join (File.dirname __FILE__), path
  end
end

require_relative '../modules/mymodule' # definition of MyModule
class MyClass
  extend MyModule
  my_method 'my_file.yml'
end

我得到的输出类似于 my_home_dir/modules/my_file.yml 但我希望它是 my_home_dir/files/my_file.yml 其中 files 是定义 MyClass 的目录名称。

我知道当我调用 my_method 时可以使用完整路径,但是有没有办法让导入的文件仍然将 __FILE__ 设置为导入文件的名称?

基本上在 my_method 中,我需要文件的完整路径,并且我只想传递相对于我的调用文件路径的路径。

最佳答案

__FILE__ 始终是包含 __FILE__ 变量的文件的名称,因此说 my_method 将始终返回 my_method code> 是定义的,而不是在 MyClass 调用它的地方。

您或许可以使用 caller 获取您想要的信息:

module MyModule
  def my_method path
    p caller
  end
end

include MyModule # definition of MyModule
class MyClass
  extend MyModule
  my_method 'my_file.yml'
end

my_class = MyClass.new

哪些输出:

["test.rb:10:in `<class:MyClass>'", "test.rb:8:in `<main>'"]

编辑:

the caller array has only file names without paths...

好吧,我希望你知道如何解决这个问题,但是......

这是在 test.rb 中:

require './test2'
class MyClass
  extend MyModule
  my_method __FILE__, 'my_file.yml'
end

my_class = MyClass.new

这是在 test2.rb 中:

module MyModule
  def my_method path, file
    dir = File.dirname(path)
    p caller.map{ |c| File.join(dir, c) }
  end
end

运行 test.rb 输出:

["./test.rb:4:in `<class:MyClass>'", "./test.rb:2:in `<main>'"]

关于ruby - 导入文件中的 __FILE__ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447301/

相关文章:

ruby - 如何确定 Big O 比较 Ruby 中的两个数组

ruby-on-rails - 将 MomentJS 格式化为 Rails DateTime

css - 使用 Compass/Sass 删除附加到 Sprite 文件名的随机字符串

ruby - 在 ruby​​ 中匹配后是否有从 $1...$n 分配的简写

ruby - 在 sqlite3 Bind 中对冗余项使用哈希

ruby - Ruby 未知类的目的是什么?

ruby - 使用/.*有什么好处?/

ruby-on-rails - Rails 4 - 无需身份验证的 Json 渲染

python - 控制台中西里尔符号的问题

ruby-on-rails - Rails 3. 如何在模型中明确地将数字四舍五入到小数点后两位?