Project1

标题: 关于Struct.new [打印本页]

作者: feizhaodan    时间: 2011-9-19 20:16
标题: 关于Struct.new
之前看KGC分配属性点的脚本里就看见了这玩意。
虽然好奇是什么,但也没怎么在意。
今天又看见了,就问问了。
这个Struct.new到底是神马?dsu_plus_rewardpost_czw
作者: RPGmaster    时间: 2011-9-19 20:27
Struct英文不是结构的意思咩=w=?
作者: 月夜神音    时间: 2011-9-20 05:41
也是不懂这语句,倒是看过这帖:
http://www.ruby-doc.org/core/classes/Struct.html

作者: 亿万星辰    时间: 2011-9-20 06:44
结构体,可以把多种变量设置成为多个属性,看起来有点像Class,又有点像Hash
作者: 八云紫    时间: 2011-9-20 09:45
等同于 C++ 的 struct 结构体.

把多个不同的对象归类到一起, 思路上更符合 OO 思想吧.

对于 class 的不同之处在于 Struct 里定义的属性都是对外可以访问的. class 默认是私有的.
作者: 苏小脉    时间: 2011-9-22 03:23
八云紫 发表于 2011-9-20 09:45
等同于 C++ 的 struct 结构体.

把多个不同的对象归类到一起, 思路上更符合 OO 思想吧.

不知在那点上“等同于 C++ 的 struct 结构体”?

Ruby 的 Struct 提供的是一种快速创建 Class 的功能,Struct.new 时需要捆绑一系列可读可写的属性,实例创建后就是一个有效的拥有这些属性的 Class,大致上可以看作一种类的模版,或是创建类的语法糖(盖无须明写 class ... end)。从设计模式角度来看,Struct 类是一个工厂类,它生产 Class 的实例。然工厂自身是抽象的,(在用户层)永远无法创建其自身的实例。

无法分配 Struct 对象:
  1. Struct.allocate # => in `allocate': allocator undefined for Struct (TypeError)
复制代码
Struct.new 创建的实际上是 Class 元类对象:
  1. Struct.new(:id) # => #<Class:0x1d1fb88>
复制代码
把多个不同的对象归类到一起, 思路上更符合 OO 思想吧.

相对于什么“更符合”?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1