[#3234] sample of TkFont class — NAGAI Hidetoshi <nagai@...>

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

52 messages 1998/07/08
[#3241] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/09

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

[#3290] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/15

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

[#3291] Re: sample of TkFont class — matz@... (Yukihiro Matsumoto) 1998/07/15

まつもと ゆきひろです

[#3307] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/16

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

[#3309] Re: sample of TkFont class — matz@... (Yukihiro Matsumoto) 1998/07/16

まつもと ゆきひろです

[#3319] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/16

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

[#3321] Re: sample of TkFont class — matz@... (Yukihiro Matsumoto) 1998/07/16

まつもと ゆきひろです

[#3324] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/16

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

[#3367] Re: sample of TkFont class — Tadayoshi Funaba <tadf@...> 1998/07/22

ふなばです。

[#3369] Re: sample of TkFont class — ttate@... 1998/07/22

立石@JAISTです。

[#3370] Re: sample of TkFont class — Tadayoshi Funaba <tadf@...> 1998/07/22

ふなばです。

[#3371] Re: sample of TkFont class — ttate@... 1998/07/23

立石@JAISTです。

[#3292] exprimental release 1.1b9_31 (hopefully final) — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1998/07/15
[#3293] Re: exprimental release 1.1b9_31 (hopefully final) — Takahiro Maebashi <maebashi@...> 1998/07/15

前橋です。

[#3294] Re: exprimental release 1.1b9_31 (hopefully final) — matz@... (Yukihiro Matsumoto) 1998/07/15

まつもと ゆきひろです

[#3295] Re: exprimental release 1.1b9_31 (hopefully final) — Takahiro Maebashi <maebashi@...> 1998/07/15

前橋です。

[ruby-dev:3186] Re: once function

From: "MAEDA Shugo" <shugo@...>
Date: 1998-07-01 17:33:15 UTC
List: ruby-dev #3186
前田です。
# ruby-listに振ります。

>もちろん、他の使い道もあるのでしょうが、Rubyの場合、文法で
>once functionをサポートするほどのことはないように思います。
># なぜなら、EiffelよりRubyの方が自由度が高いから:-)

一応ユーザレベルでの実装例を出しておきます。
メール末尾に添付したonce.rbを使えば、

require "once"

class Foo
  def initialize
    @val = 1
  end

  def_once :foo do
    @val += 1
  end
end

f = Foo.new
p f.foo #=> 2
p f.foo #=> 2
p f.foo #=> 2

などということができます。

ただ、instance_evalを使っているため、ブロックパラメータを
渡す事が出来ないのですが、once functionでパラメータを使用
することはないと思うので、許してください。

--
前田 修吾
----------
# once.rb

class Object
  ONCE_METHODS = []

private
  def def_once(name, &body)
    if name.kind_of? Integer
      name = name.id2name
    end
    id = ONCE_METHODS.length
    ONCE_METHODS.push(body)
    def_once_i(name, id)
  end
    
  def def_once_i(name, id)
    eval %{
      def #{name}
	def self.#{name}; @__#{name}__; end
	@__#{name}__ = ONCE_METHODS[#{id}].call
      end
    }
  end
end

class Module
private
  def def_once_i(name, id)
    module_eval %{
      def #{name}
	def self.#{name}; @__#{name}__; end
	@__#{name}__ = instance_eval(&ONCE_METHODS[#{id}])
      end
    }
  end
end

--
前田 修吾

In This Thread

Prev Next