ruby - 类与 Class.new,模块与 Module.new

标签 ruby

class 之间有什么区别?和 Class.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 .同样适用于 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

关键字 moduleModule::new 也有同样的区别。 .

关于ruby - 类与 Class.new,模块与 Module.new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20700535/

相关文章:

ruby - 如何使用 nokogiri 打印所有非空白 XML 节点的值及其标签名称?

ruby - 如何在输出中换行

ruby-on-rails - 如何在 Rails 中使用回形针以及它在部署中如何工作?

ruby-on-rails - 在数据库中存储 Rails 3 路由

ruby - 为哈希键创建对象

ruby-on-rails - 如何在 Paperclip 中制作条件样式?

ruby - 使用 rspec 在 ruby​​ gem 测试中加载 fixture

ruby-on-rails - Ruby on Rails, bundle 部署 dreamhost

ruby - 当我尝试访问 [ :href] attribute of a Nokogiri object, 它返回 nil - 当它不是

css - 如何将数百个 CSS 文件转换为 SCSS 文件?