我没有太多的编程经验。但是,对我来说,Struct 似乎有点类似于 Hash。
- Struct 可以做什么?
- 有没有什么 Struct 可以做而 Hash 不能做的?
google了一下,Struct的概念在C中很重要,但我对C了解不多。
最佳答案
结构在以下方面不同于使用 HashMap (除了代码的外观):
- 结构具有一组固定的属性,而您将新键添加到散列。
- 调用结构实例上不存在的属性将导致 NoMethodError,而从哈希中获取不存在的键的值只会返回 nil。
- 不同结构的两个实例永远不会相等,即使结构具有相同的属性并且实例具有相同的值(即
Struct.new(:x).new(42) == Struct.new( :x).new(42)
为假,而Foo = Struct.new(:x); Foo.new(42)==Foo.new(42)
为真) . - 结构的
to_a
方法返回值数组,而散列上的to_a
为您提供键值对数组(其中“对”表示“二元数组") - 如果
Foo = Struct.new(:x, :y, :z)
您可以执行Foo.new(1,2,3)
来创建一个实例Foo
而不必拼出属性名称。
所以回答这个问题:当你想用一组已知的属性对对象建模时,使用结构。当您想任意建模时使用 HashMap (例如,计算每个单词在字符串中出现的频率或将昵称映射到全名等绝对不是结构的工作,而用姓名、年龄和地址建模人将是非常适合 Person = Struct.new(name, age, address)
)。
作为旁注:C 结构与 ruby 结构几乎没有关系,所以不要让自己对此感到困惑。
关于ruby - 什么时候在 Ruby 中使用 Struct 而不是 Hash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3275594/