在整个互联网上,我看到人们使用“include”为主要范围带来新功能。
最近,我在SO回答中看到了这一点:
require 'fileutils' #I know, no underscore is not ruby-like
include FileUtils
# Gives you access (without prepending by 'FileUtils.') to
cd(dir, options)
cd(dir, options) {|dir| .... }
pwd()
扩展工作也是如此,但根据我的理解,只有扩展应该工作。我甚至不知道为什么主要对象具有包含功能。
在主要范围内:
self.class == Object #true
Object.new.include #NoMethodError: undefined method `include' for #<Object:0x000000022c66c0>
我的意思是逻辑上,因为self.is_a?(Module) == false
在主范围内时,main甚至不应该具有include功能,因为include用于向子实例添加方法而main不是类或模块所以没有儿童实例可以谈论。
我的问题是,为什么包括在主要范围内的工作,导致它在那里工作的设计决策是什么,最后,我们不应该在这种情况下“延伸”以便不做“扩展/包含“功能更加令人困惑,这要归功于人们经常使用ruby hook来调用另一个人来调用另一个。
答案 0 :(得分:3)
main
范围是&#34;特殊&#34;。在main
范围定义的实例方法成为private
的{{1}}实例方法,常量变为Object
的常量,Object
包含在include
中。可能还有其他我想念的东西。 (例如,Object
假设prepend
,我从未想过它。直到现在。)