Ruby 避免重新加载时的递归别名

Ruby 避免重新加载时的递归别名,ruby,alias,reload,Ruby,Alias,Reload,有时,我们使用alias将方法替换为修改后的方法,如下所示: alias old_foo :foo private :old_foo def foo ... old_foo ... end 如果确保这样的文件只加载一次就可以了,但在某些情况下,可能会多次加载这样的文件。在这种情况下,普通的方法定义是可以的:它们将被相同的内容覆盖。而且,变量也可以(尽管它们可能会发出警告消息)。但对于alias ing来说,这种情况会造成巨大的混乱和无限循环。在上述情况下,使用alias最安全的方法

有时,我们使用
alias
将方法替换为修改后的方法,如下所示:

alias old_foo :foo
private :old_foo
def foo
  ...
  old_foo
  ...
end

如果确保这样的文件只加载一次就可以了,但在某些情况下,可能会多次加载这样的文件。在这种情况下,普通的方法定义是可以的:它们将被相同的内容覆盖。而且,变量也可以(尽管它们可能会发出警告消息)。但对于alias ing来说,这种情况会造成巨大的混乱和无限循环。在上述情况下,使用alias最安全的方法是什么,这样当文件被多次加载时,alias就不会被弄乱?

使用
require
而不是
load
应该确保“只加载一次”的语义。另外,如果定义了
,又该怎么办?old_foo
?@SergioTulentsev关于您的第一条评论,这不是一个解决方案。我需要重新加载文件,但仍然没有问题。关于你的第二个评论,这就是我要问的答案。我见过类似的情况,但想讨论一些变体。我是否应该使用
已定义?
响应?
,等等。为什么选择一个而不是另一个等等。你应该试试,似乎它对你有用。