[#21508] eval BEGIN/END at runtime — "NAKAMURA, Hiroshi" <nakahiro@...>

なひです。

15 messages 2003/10/06

[#21616] access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

44 messages 2003/10/14
[#21643] Re: access ENV on $SAFE==4 — matz@... (Yukihiro Matsumoto) 2003/10/20

まつもと ゆきひろです

[#21646] Re: access ENV on $SAFE==4 — TADA Tadashi <sho@...> 2003/10/20

ただただしです。

[#21656] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/20

永井@知能.九工大です.

[#21695] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/23

永井@知能.九工大です.

[#21696] Re: access ENV on $SAFE==4 — nobu.nakada@... 2003/10/23

なかだです。

[#21697] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/23

永井@知能.九工大です.

[#21698] Re: access ENV on $SAFE==4 — nobu.nakada@... 2003/10/23

なかだです。

[#21704] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/24

永井@知能.九工大です.

[#21712] Re: access ENV on $SAFE==4 — matz@... (Yukihiro Matsumoto) 2003/10/24

まつもと ゆきひろです

[#21713] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/24

永井@知能.九工大です.

[#21715] Re: access ENV on $SAFE==4 — matz@... (Yukihiro Matsumoto) 2003/10/25

まつもと ゆきひろです

[#21718] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/25

永井@知能.九工大です.

[#21720] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/25

永井@知能.九工大です.

[#21721] Re: access ENV on $SAFE==4 — matz@... (Yukihiro Matsumoto) 2003/10/25

まつもと ゆきひろです

[#21723] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/25

永井@知能.九工大です.

[#21727] Re: access ENV on $SAFE==4 — Hidetoshi NAGAI <nagai@...> 2003/10/26

永井@知能.九工大です.

[#21682] ruby-tk hangs when exception is raised — akira yamada <akira@...>

62 messages 2003/10/23
[#21683] Re: ruby-tk hangs when exception is raised — nobu.nakada@... 2003/10/23

なかだです。

[#21685] Re: ruby-tk hangs when exception is raised — akira yamada / やまだあきら <akira@...> 2003/10/23

[#21687] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/10/23

永井@知能.九工大です.

[#21688] Re: ruby-tk hangs when exception is raised — akira yamada / やまだあきら <akira@...> 2003/10/23

[#21691] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/10/23

永井@知能.九工大です.

[#21693] Re: ruby-tk hangs when exception is raised — akira yamada / やまだあきら <akira@...> 2003/10/23

[#21694] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/10/23

永井@知能.九工大です.

[#21736] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/10/28

永井@知能.九工大です.

[#21744] Re: ruby-tk hangs when exception is raised — akira yamada / やまだあきら <akira@...> 2003/10/28

[#21797] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/10/31

永井@知能.九工大です.

[#21801] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/11/01

永井@知能.九工大です.

[#21825] Re: ruby-tk hangs when exception is raised — Hidetoshi NAGAI <nagai@...> 2003/11/04

永井@知能.九工大です.

[#21833] pthread trouble on tcltklib (Re: ruby-tk hangs when exception is raised) — Hidetoshi NAGAI <nagai@...> 2003/11/05

永井@知能.九工大です.

[#21835] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/05

永井@知能.九工大です.

[#21900] Re: pthread trouble on tcltklib — nobu.nakada@... 2003/11/11

なかだです。

[#21901] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/12

永井@知能.九工大です.

[#21905] Re: pthread trouble on tcltklib — nobu.nakada@... 2003/11/12

なかだです。

[#21908] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/12

永井@知能.九工大です.

[#21914] Re: pthread trouble on tcltklib — nobu.nakada@... 2003/11/12

なかだです。

[#21915] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/12

永井@知能.九工大です.

[#21916] Re: pthread trouble on tcltklib — nobu.nakada@... 2003/11/12

なかだです。

[#21922] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/14

永井@知能.九工大です.

[#21929] Re: pthread trouble on tcltklib — Tietew <tietew-ml-ruby-dev@...> 2003/11/17

[#21930] Re: pthread trouble on tcltklib — nobu.nakada@... 2003/11/17

なかだです。

[#21931] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/17

永井@知能.九工大です.

[#21934] Re: pthread trouble on tcltklib — nobu.nakada@... 2003/11/17

なかだです。

[#21937] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/17

永井@知能.九工大です.

[#21952] Re: pthread trouble on tcltklib — matz@... (Yukihiro Matsumoto) 2003/11/18

まつもと ゆきひろです

[#21957] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/19

永井@知能.九工大です.

[#21958] Re: pthread trouble on tcltklib — Tietew <tietew-ml-ruby-dev@...> 2003/11/19

[#21959] Re: pthread trouble on tcltklib — Hidetoshi NAGAI <nagai@...> 2003/11/19

永井@知能.九工大です.

[#21960] Re: pthread trouble on tcltklib — Tietew <tietew-ml-ruby-dev@...> 2003/11/19

[#21707] drb Hash#each — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

22 messages 2003/10/24
[#21708] Re: drb Hash#each — m_seki@... 2003/10/24

[#21709] Re: drb Hash#each — matz@... (Yukihiro Matsumoto) 2003/10/24

まつもと ゆきひろです

[#21710] Re: drb Hash#each — m_seki@... 2003/10/24

[#21747] ruby 1.8.1 preview1 schedule — matz@... (Yukihiro Matsumoto)

関係者各位、

25 messages 2003/10/29

[ruby-dev:21595] Re: extend with marshal_dump/marshal_load

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 2003-10-10 08:06:00 UTC
List: ruby-dev #21595
なひです。

> From: "Yukihiro Matsumoto" <matz@ruby-lang.org>
> Sent: Friday, October 10, 2003 2:26 PM

> extend対象のクラス(サンプルではQuux)を作らなくちゃいけないん
> ですが、以下のようなテクニックが使えます。FooやBarではextend
> についてなにも考える必要が無いのがポイントです。

確かにこれはポイントとして重視すべきですね。
「marshal_dumpペアを持つオブジェクトにextendする場合、
  気をつけないと元に戻らない
  (Marshalを通るとおかしなオブジェクトになる)」
わけですから、債務はそのオブジェクトを作ったヤツにあり、
FooやBarではない、と。

local(private) instance variableについては、リフレクションにより
外からさわれるようにして、それを書き出すようにしたほうが楽なのかな。

ちなみに、親クラスでmarshal_dumpがあるのに、サブクラスで
marshal_dumpを定義せず、サブクラスで導入したインスタンス変数が
書き出されなくても、それはサブクラスの債務違反ということで、
ほっといていいと思います。実は_dumpも気にしなくていいんじゃないかと。。
ただ、Timeが困るんですが。


以下、ほとんど全文引用ですいません。若干の突っ込み。

> class Foo
>   def initialize
>     @data_a = 1
>     @r, @w = IO.pipe
>   end
> 
>   def marshal_dump
>     @data_a
>   end
> 
>   def marshal_load(obj)
>     @data_a = obj
>     @r, @w = IO.pipe
>   end
> end
> 
> class Bar < Foo
>   def initialize
>     super
>     @data_b = 2
>   end
> 
>   def marshal_dump
>     [super, @data_b]
>   end
> 
>   def marshal_load(data)
>     super(data[0])
>     @data_b = data[1]
>   end
> end
> 
> module ExtendMarshal
>   def marshal_dump
>     base_data = super
>     extends = (class << self; self; end).ancestors - self.class.ancestors - [ModuleMarshal]

ModuleMarshal -> ExtendMarshalかな。しかしこのパターン
(Quuxを使うパターン)だとこの引き算は要らなそうですね。

o1にExtendMarshalをextendするパターンでいけるとかっこいいんだ
けど、「marshal_dumpがあるとextendは保存されない」により
絶対にうまくいかない。。。

>     data = {:modules => extends, :base => base_data}
>     extends.each do |m|
>       m.instance_method(:marshal_dump_extend).bind(self).call(data)
>     end
>     data
>   end
> 
>   def marshal_load(data)
>     extends = data[:modules]
>     extends.each do |m|

each -> reverse_eachにすると、extend順も戻ると思います。

>       self.extend(m)
>       m.instance_method(:marshal_load_extend).bind(self).call(data)
>     end
>     super(data[:base])
>   end
> end
> 
> module Baz
>   include ExtendMarshal
>   def marshal_dump_extend(data)
>     data[:Baz] = 42
>   end
> 
>   def marshal_load_extend(data)
>     @baz_data = data[:Baz]
>   end
> end
> 
> class Quux<Bar
>   include ExtendMarshal
> end
> 
> o1 = Quux.new
> o1.extend(Baz)
> o2 = Marshal.load(Marshal.dump(o1))
> p o1
> p o2

In This Thread

Prev Next