[#29469] エラーを捕まえたいのですが ... — Sakae Kobayashi <sakae@...>

困った時に出てくる、小林榮です。

12 messages 2001/05/01

[#29490] Re: [ruby-talk:14555] Ruby as a Mac OS/X scripting language — maili31s@... (SugHimsi == SUGIHARA Hiroshi)

すぎむし速報。↓だそうです。

12 messages 2001/05/02

[#29524] tr range? — kiri@...

桐山です。

17 messages 2001/05/06
[#29526] Re: tr range? — Koji Arai <JCA02266@...> 2001/05/06

新井です。

[#29644] rwiki.rb でエラー — norio goto <goto@...>

お世話になります、後藤@横河工事です。

18 messages 2001/05/14
[#29645] Re: rwiki.rb でエラー — m_seki@... 2001/05/14

[#29646] Re: rwiki.rb でエラー — norio goto <goto@...> 2001/05/14

後藤@横河工事です。

[#29675] with(obj){ } が欲しい。 — Take_tk <ggb03124@...>

例によって、ワタシ好みののりクエストですみません。

24 messages 2001/05/15
[#29694] Re: with(obj){ } が欲しい。 — "K.Kosako" <kosako@...> 2001/05/17

Take_tkさんの<20010515205133.DFBA.GGB03124@nifty.ne.jp>から

[#29707] OBJECT DAY2001 — "K.Kosako" <kosako@...>

OBJECT DAY2001から帰ってきました。

71 messages 2001/05/18
[#29712] Re: OBJECT DAY2001 — matz@... (Yukihiro Matsumoto) 2001/05/18

まつもと ゆきひろです

[#29719] Re: OBJECT DAY2001 — WATANABE Tetsuya <tetsu@...> 2001/05/21

渡辺哲也です。

[#29731] YARPC 19101 (Re: OBJECT DAY2001) — TAKAHASHI Masayoshi <maki@...> 2001/05/21

YARPC関連で動いてお騒がせしている(_o_)高橋征義です。

[#29792] Re: YARPC 19101 — akira yamada / やまだあきら <akira@...> 2001/05/27

[#29794] Re: YARPC 19101 — Minero Aoki <aamine@...> 2001/05/27

あおきです。

[#29803] Re: YARPC 19101 — Hiroshi IGARASHI <iga@...> 2001/05/27

いがらしです。

[#29721] Cygwin で Ruby をコンパイルするとエラーがでます。 — "Inoue" <inoue@...>

はじめまして、最近Rubyをはじめました井上と申します。

10 messages 2001/05/21

[#29788] marshaled time format differ — IWATSUKI Hiroyuki <don@...>

岩月と申します。

19 messages 2001/05/25
[#29789] Re: marshaled time format differ — matz@... (Yukihiro Matsumoto) 2001/05/25

まつもと ゆきひろです

[#29790] Re: marshaled time format differ — IWATSUKI Hiroyuki <don@...> 2001/05/26

岩月と申します。

[#29823] Re: marshaled time format differ — IWATSUKI Hiroyuki <don@...> 2001/05/27

岩月と申します。

[#29853] "" で行われる展開を eval 無しで… — ABE Shigeru <shiger-a@...>

 みなさま、はじめまして。阿部といいます。

17 messages 2001/05/28
[#29854] Re: "" で行われる展開を eval 無しで… — rubikitch <rubikitch@...> 2001/05/28

From: ABE Shigeru <shiger-a@nifty.com>

[#29941] Ruby ライセンスについて — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

38 messages 2001/05/31
[#29942] Re: Ruby ライセンスについて — Takahiro Kambe <taca@...> 2001/05/31

In message <991297854.779223.23013.nullmailer@ev.netlab.zetabits.com>

[#29944] Re: Ruby ライセンスについて — "Akinori MUSHA" <knu@...> 2001/05/31

At Thu, 31 May 2001 18:00:18 +0900,

[ruby-list:29694] Re: with(obj){ } が欲しい。

From: "K.Kosako" <kosako@...>
Date: 2001-05-17 03:44:38 UTC
List: ruby-list #29694
Take_tkさんの<20010515205133.DFBA.GGB03124@nifty.ne.jp>から
> 一時的にスコープを変更してレシーバの記述が不要になるような方法が欲しいの
> ですがうまい方法はありますでしょうか?。
> 
> 	with(obj){
> 		method1 ..
> 		method2 ..
> 		method2 ..
> 	}
> 
> というような書き方ができるようになるとうれしいのですが・・。

再挑戦してみました。
実用的には全く意味がありませんが、
可能かどうか知りたかったので。

# with.rb
require 'forwardable.rb'

module SingleForwardable
  alias orig_def_singleton_delegator def_singleton_delegator

  def def_singleton_delegator(accessor, method, ali = method)
    if (@_class.method_defined?(ali))
      @_class.instance_eval("alias_method(:_orig_#{ali},:#{ali})")
      @_collision << ali
    else
      @_added << ali
    end
    orig_def_singleton_delegator(accessor, method, ali)
  end

  def def_public_delegators(accessor)
    @_collision = []
    @_added = []
    @_accessor = accessor
    @_class = class << self; self; end
    methods = class << accessor; public_instance_methods(true); end
    methods -= ["__send__", "instance_eval", "__id__", "==", "=~", "==="]
    def_singleton_delegators(:@_accessor, *methods)
  end

  def clear_public_delegators()
    for m in @_collision
      @_class.instance_eval("alias_method(:#{m},:_orig_#{m})")
    end
    for m in @_added
      @_class.instance_eval { remove_method(m) }
    end
  end
end


def with(obj)
  extend(SingleForwardable)
  def_public_delegators(obj)
  yield
  clear_public_delegators()
end


if __FILE__ == $0
  class Foo
    def foo1;      p "Foo#foo1"; end
    def foo2(x);   p "Foo#foo2"; end
    def foo3(x,y); p "Foo#foo3"; end
  end

  class Bar
    def self.foo1; p "Bar::foo1"; end
    C = 100

    with(f = Foo.new) {
      foo1
      foo2(10)
      foo3(10,20)
      p equal?(f)
      p C
    }
   foo1
  end

  class Baz
    def foo1; p "Baz#foo1"; end
  end

  (x = Baz.new).instance_eval {
    with(f = Foo.new) {
      foo1
      foo2(10)
      foo3(10,20)
      p equal?(f)
    }
    foo1
  }
end
----
小迫@ソフネック   渋谷区恵比寿1-15-1

In This Thread