【发布时间】:2009-05-07 21:26:51
【问题描述】:
我见过两种常用的技术,用于将当前正在执行的文件的目录添加到 $LOAD_PATH(或 $:)。如果您不使用 gem,我会看到这样做的好处。显然,一个似乎比另一个更冗长,但是有理由选择一个而不是另一个吗?
第一种,冗长的方法(可能有点矫枉过正):
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
还有更直接、快速和肮脏的方法:
$:.unshift File.dirname(__FILE__)
有什么理由选择一个而不是另一个?
【问题讨论】:
-
一个 稍微 不那么冗长的版本是:
File.expand_path(File.dirname(__FILE__)).tap {|pwd| $LOAD_PATH.unshift(pwd) unless $LOAD_PATH.include?(pwd)} -
“除非”子句怎么样?以上两者怎么能等价呢?
-
作为一个来这里尝试了解如何使用它的人,它非常神秘。我看不到示例中目录名称的来源。如果有人能说清楚,我将不胜感激。
-
使用
__dir__(从 Ruby 2.0 开始)可以使这些更简洁。