From: "NAKAMURA, Hiroshi" Date: 2002-02-25T13:19:15+09:00 Subject: [ruby-dev:16063] Re: New Struct なひです。 > From: Shin-ichiro HARA [mailto:sinara@blade.nagaokaut.ac.jp] > Sent: Monday, February 25, 2002 12:31 PM > ホントに Struct って使われてないなあ。 パッと見で使いづらい感じがします。なぜでしょう。 newでklassを生成するせいかな? > で、こんなのが組み込みクラスであったら(Struct と呼べないか > もしれないが)いいと思いません? 確かにStruct.newは構造体のインスタンスを返してくれたほうが、 newの挙動としては分かり易い気もします。でも、いきなり インスタンス作る(で、そのインスタンスのクラスのメンバ定義は 忘れちゃう)というのは、いくら分かり易くても、 実際にはあまり使われなさそうな気がします。 小さなプログラムなら便利かな? / / / 毎度SOAP話ですが、SOAP4Rでは最近、 Structを構造体っぽくmarshallingするのをあきらめました。 確実に元の状態にunmarshalするためには、 いろいろ情報を打ち込まないといけないので。。。 というわけで、CのstructとSOAPでお話ししたい場合、 classを作らないといけません。 ま、こっちのほうが受け入れ易いかな、と。 require 'soap/marshal' Foo1 = Struct.new( "Foo1", :m ) Foo2 = Struct.new( :m ) class Foo3 attr_accessor :m end puts SOAP::Marshal.marshal( Foo1.new ) puts SOAP::Marshal.marshal( Foo2.new ) puts SOAP::Marshal.marshal( Foo3.new ) p SOAP::Marshal.unmarshal( SOAP::Marshal.marshal( Foo1.new )) # => # p SOAP::Marshal.unmarshal( SOAP::Marshal.marshal( Foo2.new )) # => # p SOAP::Marshal.unmarshal( SOAP::Marshal.marshal( Foo3.new )) # => # 以下、XML記述。 == aFoo1 Struct::Foo1 == aFoo2 Foo2 == aFoo3