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
.同样适用于module
秒。
我错过了什么吗?
最佳答案
您在 class
关键字和 Class::new
之间错过的有趣点是 - Class::new
接受 block 。因此,当您将使用 Class::new
创建类对象时,您还可以访问周围的变量。因为 block 是闭包。但这是不可能的,因为您将使用关键字 class
创建一个类。因为 class
创建了一个全新的作用域,它对外界一无所知。让我举几个例子。
这里我使用关键字 class
创建了一个类:
count = 2
class Foo
puts count
end
# undefined local variable or method `count' for Foo:Class (NameError)
这里使用 Class.new
:
count = 2
Foo = Class.new do |c|
puts count
end
# >> 2
关键字 module
和 Module::new
也有同样的区别。 .
关于ruby - 类与 Class.new,模块与 Module.new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20700535/