【发布时间】:2012-01-26 01:13:47
【问题描述】:
可以这样定义
Struct.new(:x, :y)
但是可以用它们做什么有用的事情呢?具体来说,如何创建这种结构的实例?这不起作用
Struct.new(:x => 1, :y => 1)
(你会得到TypeError: can't convert Hash into String)。
我使用的是 Ruby 1.9.2。
更新:
到目前为止的建议很好,谢谢。我想我问这个的原因是我有好几次发现自己想要这样做
Struct.new(:x => 1, :y => 1)
只是为了让我可以传递一个可以写obj.x 的对象,而不是例如实例化一个哈希并不得不写obj[:x]。在这种情况下,我希望结构是真正匿名的——我不想通过命名Struct.new 调用返回的内容来污染我的命名空间。正如已经建议的那样,最接近的事情是
Struct.new(:x, :y).new(1, 1)
但是你喜欢他们的苹果吗?我不确定我知道。期望能够一次性定义和实例化匿名结构(作为核心 Ruby 的一部分)是否合理?我想当我阅读Struct.new 上的官方 Ruby 文档时,我认为“匿名”这个词允许这样做,但事实并非如此。
【问题讨论】:
-
是的,我在发布之前发现了它,但它并没有直接解决匿名结构。
标签: ruby