如何在Ruby中实现require方法的完全覆盖?
- 内容介绍
- 文章标签
- 相关推荐
本文共计351个文字,预计阅读时间需要2分钟。
在Ruby文件中避免覆盖`require`,确保`start.rb`正确引用依赖,方法如下:
在`start.rb`文件顶部添加`require 'rubygems'`。
错误原因是直接使用`require`可能覆盖了全局的库。正确做法是使用`require 'gem_name'`,确保引用的是特定库。
例如:rubyrequire 'rubygems'require 'gem_name'
这样,即使有多个文件需要相同库,也不会引起冲突。
我试过的一切都给了我一个堆栈溢出错误.
做正确的方法是什么?
通常,如果要修补某些内置方法,则应首先为原始方法创建别名.大多数情况下,你会用最重要的方法在某处调用旧的.否则你将失去原始方法的功能,并且可能会破坏应用程序逻辑.>使用ri require或阅读文档以找出require方法的定义位置.你会发现它在内核模块中.此外,您将找到其方法签名,以便您知道参数列表的外观.
>猴子补丁模块内核.除非你知道自己在做什么,否则不要破坏功能.
module Kernel # make an alias of the original require alias_method :original_require, :require # rewrite require def require name puts name original_require name end end # test the new require require 'date'
本文共计351个文字,预计阅读时间需要2分钟。
在Ruby文件中避免覆盖`require`,确保`start.rb`正确引用依赖,方法如下:
在`start.rb`文件顶部添加`require 'rubygems'`。
错误原因是直接使用`require`可能覆盖了全局的库。正确做法是使用`require 'gem_name'`,确保引用的是特定库。
例如:rubyrequire 'rubygems'require 'gem_name'
这样,即使有多个文件需要相同库,也不会引起冲突。
我试过的一切都给了我一个堆栈溢出错误.
做正确的方法是什么?
通常,如果要修补某些内置方法,则应首先为原始方法创建别名.大多数情况下,你会用最重要的方法在某处调用旧的.否则你将失去原始方法的功能,并且可能会破坏应用程序逻辑.>使用ri require或阅读文档以找出require方法的定义位置.你会发现它在内核模块中.此外,您将找到其方法签名,以便您知道参数列表的外观.
>猴子补丁模块内核.除非你知道自己在做什么,否则不要破坏功能.
module Kernel # make an alias of the original require alias_method :original_require, :require # rewrite require def require name puts name original_require name end end # test the new require require 'date'

