有什么区别class和Class.new&module和Module.new?
我知道:
Class.new/ Module.new创建匿名class/ module.当我们第一次将它分配给常量时,它变成了class/的名称module.class/ module自动执行此操作.
当我们想要继承时,我们可以传递一个参数:Class.new(ancestor).当我们没有指定祖先时,它被设置为Object.class使用此语法:class A < Ancestor
Class.new返回一个object.class A回报nil.同样适用于modules.
我错过了什么?
class关键字和错过的有趣点Class::new是 - Class::new接受阻止.因此,当您使用创建类对象时,Class::new您还可以访问周围的变量.因为块是封闭的.但是,当您使用关键字创建类时,这是不可能的class.因为class创造了一个对外界不了解的全新范围.让我举几个例子.
这里我使用关键字创建一个类class:
count = 2
class Foo
puts count
end
# undefined local variable or method `count' for Foo:Class (NameError)
Run Code Online (Sandbox Code Playgroud)
这里使用Class.new:
count = 2
Foo = Class.new do |c|
puts count
end
# >> 2
Run Code Online (Sandbox Code Playgroud)
关键字module和Module::new.