Они могут быть определены как этотКакова цель анонимной структуры в Ruby?
Struct.new(:x, :y)
Но что полезно может быть сделано с ними? В частности, как я могу создать экземпляр такой структуры? Это не работает
Struct.new(:x => 1, :y => 1)
(вы получите TypeError: can't convert Hash into String
).
Я использую Ruby 1.9.2.
UPDATE:
Хорошие указатели до сих пор, спасибо. Я полагаю, что причина, я спросил это было то, что я несколько раз обнаружили, что хотят сделать это
Struct.new(:x => 1, :y => 1)
просто так, что я могу передать объект вокруг, где я могу написать obj.x
вместо, скажем, инстанцировании хэш и необходимо написать obj[:x]
. В этом случае я хочу, чтобы структура была действительно анонимно. Я не хочу загрязнять свое пространство имен чем-либо, называя то, что возвращается из вызова Struct.new
. Ближе всего к тому, что, как уже было предложено в
Struct.new(:x, :y).new(1, 1)
Но как вы их любите яблоки? Я не уверен, что знаю. Можно ли ожидать, что сможет определить и создать экземпляр анонимной структуры за один раз (как часть основного Ruby)? Думаю, когда я прочитал официальные документы Ruby по адресу Struct.new
, я предполагаю, что это слово «анонимный» позволяет это, но это не так.
Это может быть также интересным для вас, чтобы пролистать: http://stackoverflow.com/questions/1177594/ruby-struct-vs-openstruct – gilligan
Да, я обнаружил, что перед публикацией, но он не обращается к анонимным структурам напрямую. – Ben