我在两个不同的目录中有两个文件:
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/