“需要 File.dirname(__FILE__)” -- 如何安全地撤销文件系统依赖?
我使用的一些 Ruby 库使用这样的 require
语句:
require File.dirname(__FILE__) + '/specification_helper.rb'
lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "lib"))
require File.join(File.dirname(__FILE__), 'lib/tools', 'version')
require File.expand_path(File.join(File.dirname(__FILE__), 'datautils', 'conn'))
这种格式不会使您的代码不必要地依赖于文件系统的结构吗?
作者为什么要这样做呢?
是否可以(安全地)更改此代码以消除对文件系统的依赖?
Some Ruby librararies I'm using use require
statements like this:
require File.dirname(__FILE__) + '/specification_helper.rb'
lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "lib"))
require File.join(File.dirname(__FILE__), 'lib/tools', 'version')
require File.expand_path(File.join(File.dirname(__FILE__), 'datautils', 'conn'))
Doesn't this format make your code needlessly dependent on the structure of the file system?
Why did the author do it this way?
Would it be possible to (safely) alter this code to remove this dependency on the filesystem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我实际上在生产代码中使用这个方案。
要求相对于当前源位置的文件有几个优点:
如果您更喜欢使用修改后的 ruby 搜索路径,您可以通过多种方式做到这一点:
解决方案 1 意味着控制 ruby 的调用方式。 您需要一个脚本来启动程序,例如:
或者:
解决方案 2 可行,但不能避免冲突。 您通常会这样做:
解决方案 3 是不可取的,您对环境变量的依赖越少,效果就越好。
I actually use this scheme in production code.
Requiring files relative to the current source location has several advantages :
Should you prefer to use a modified ruby search path, you can do it in multiple ways :
Solution 1 implies controlling how ruby is invoked. You'll need a script to start the program, such as:
Or:
Solution 2 is workable but does not avoid collisions. You'll typically do something like :
Solution 3 is unadvisable, the less dependencies you'll have toward environment variables, the better you will be.