ruby - 从结构创建类的不同方法之间有什么区别?

标签 ruby struct

我最近看到了两种在 Ruby 中使用结构创建类的方法:

Customer = Struct.new(:name, :address) do
  # ...
end

class Customer < Struct.new(:name, :address)
  # ...
end

这些方法有什么区别?

最佳答案

Ruby 实际上有几个作用域:

# scope one, opened with `module` keyword
module ...
  # scope two, opened with `class` keyword
  class ...
  end
end

module, class 其中一些。

当您使用第一个示例时,您可以共享一个作用域来访问 f 变量,这在某些情况下非常方便:

=> f = 1
=> 1
=> Customer = Struct.new(:a) do
=>  puts f
=> end
=> 1
=> #<Customer:0x005561498351f8>

对于第二个例子,你不能访问f变量:

=> f = 1
=> class Customer < Struct.new(:a)
=>  puts f
=> end
#> NameError: undefined local variable or method `f' for Customer:Class

祖先链也有差异 - 请参阅@AndreyDeineko 的回答。

关于ruby - 从结构创建类的不同方法之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818414/

相关文章:

c - MPI 上带有指针的结构

c++ - 动态创建、命名和放置队列

c# - 我可以在不装箱的情况下通过反射为结构设置值吗?

ruby - 是否有易于使用的 Ruby FTP 库?

ruby - 在 autotest 或 Guard 下安装、配置和运行 minitest 的简明方法

ruby - Ruby 中的回溯和组合电子学问题

c - 在 C 中访问灵活数组成员

ruby-on-rails - Octopus 可以保留数据库连接池吗?

ruby-on-rails - 无法加载此类文件 -- mkmf (LoadError)

c - 如何计算 C 结构中的填充