class vs Class.new,module vs Module.new

Dar*_*dza 6 ruby

有什么区别classClass.new&moduleModule.new

我知道:

  1. Class.new/ Module.new创建匿名class/ module.当我们第一次将它分配给常量时,它变成了class/的名称module.class/ module自动执行此操作.

  2. 当我们想要继承时,我们可以传递一个参数:Class.new(ancestor).当我们没有指定祖先时,它被设置为Object.class使用此语法:class A < Ancestor

  3. Class.new返回一个object.class A回报nil.同样适用于modules.

我错过了什么?

Aru*_*hit 8

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)

关键字moduleModule::new.