[#18233] [book] blade.nagaokaut.ac.jp/ruby/ruby-list/ — Shin-ichiro Hara <sinara@...>

原です。

21 messages 1999/11/01
[#18239] [book] csv_split2 [Re: blade.nagaokaut.ac.jp/ruby/ruby-list/] — keiju@... (石塚圭樹) 1999/11/01

けいじゅ@日本ラショナルソフトウェアです.

[#18244] Re: [book] csv_split2 [Re: blade.nagaokaut.ac.jp/ruby/ruby-list/] — Shin-ichiro Hara <sinara@...> 1999/11/01

原です。

[#18289] Re: [book] csv_split2 — Koretsugu Daigoro <tmmcross@...> 1999/11/02

これつぐです。

[#18291] Re: [book] csv_split2 — keiju@... (石塚圭樹) 1999/11/02

けいじゅ@日本ラショナルソフトウェアです.

[#18311] Re: [book] csv_split2 — Koretsugu Daigoro <tmmcross@...> 1999/11/02

これつぐです。

[#18338] オブジェクトの非同一性判定 — Ayanosuke <aya@...>

 綾乃介です。

13 messages 1999/11/03

[#18539] [book] $*, etc. — Yasuhiro Fukuma <yasuf@...>

福間@福岡 です。

44 messages 1999/11/11

[#18580] — tokoma@... (中川 誠)

中川です。

44 messages 1999/11/14
[#18619] build on alpha — Go Nakagawa <nakagawa@...> 1999/11/15

もとの質問のかたとは別の中川です。

[#18737] Re: build on alpha — tokoma@... (中川 誠) 1999/11/18

中川です。

[#19144] Re: build on alpha — tokoma@... (中川 誠) 1999/12/04

中川です。長文で失礼します。

[#19341] Re: build on alpha — tokoma@... (中川 誠) 1999/12/09

中川です。

[#19344] Re: build on alpha — matz@... (Yukihiro Matsumoto) 1999/12/09

まつもと ゆきひろです

[#19400] Re: build on alpha — tokoma@... (中川 誠) 1999/12/10

中川です。

[#19426] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/11

えぐち@エスアンドイー です。

[#19459] Re: build on alpha — tokoma@... (中川 誠) 1999/12/13

中川です。

[#19461] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/13

えぐち@エスアンドイー です。

[#19506] Re: build on alpha — tokoma@... (中川 誠) 1999/12/14

中川です。

[#19520] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/15

えぐち@エスアンドイー です。

[#19522] Re: build on alpha — matz@... (Yukihiro Matsumoto) 1999/12/15

まつもと ゆきひろです

[#19543] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/15

えぐち@エスアンドイー です。

[#19562] Re: build on alpha — tokoma@... (中川 誠) 1999/12/15

中川です。

[#19569] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/16

えぐち@エスアンドイー です。

[#19592] Re: build on alpha — tokoma@... (中川 誠) 1999/12/16

中川です。

[#18637] constant? — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

20 messages 1999/11/16
[#18640] Re: constant? — WATANABE Hirofumi <Hirofumi.Watanabe@...> 1999/11/16

わたなべです.

[#18650] Re: constant? — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/16

もりきゅうです。

[#18657] Re: constant? — matz@... (Yukihiro Matsumoto) 1999/11/16

まつもと ゆきひろです

[#18709] ADO にて datetime 型の取得 — Takashi SHIODA <tsio@...>

塩田です。

18 messages 1999/11/18
[#18779] Re: ADO にて datetime 型の取得 — Masaki Suketa<CQN02273@...> 1999/11/20

助田です.

[#18802] Re: ADO にて datetime 型の取得 — Takashi SHIODA <tsio@...> 1999/11/21

オレンジソフト塩田です。

[#18712] Re: header output in eruby — TAKEUCHi Kahori <take-k@...>

たけうちです。

16 messages 1999/11/18
[#18716] Re: header output in eruby — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/11/18

なひです.

[#18830] mod_ruby-0.1.4 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

16 messages 1999/11/22

[#18853] initializer polymorphism? — Takeyuki Watadani <watadani@...>

渡谷といいます。

25 messages 1999/11/23

[#18911] Re: eRuby 変換後の無駄 (?) な改行 — TAKEUCHi Kahori <take-k@...>

たけうちです。

14 messages 1999/11/25

[#18914] Ruby standard GUI framework? — Hideto ISHIBASHI <s34204@...>

石橋秀仁です。

43 messages 1999/11/25
[#18975] Re: Ruby standard GUI framework? — 中村暁史 Nakamura Akifumi <BXQ04723@...> 1999/11/27

[#19020] Re: Ruby standard GUI framework? — Hideto ISHIBASHI <s34204@...> 1999/11/29

石橋秀仁です。

[#19026] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/11/29

[#19081] Re: Ruby standard GUI framework? — "Hideaki Takata" <hideakit@...3.dion.ne.jp> 1999/12/01

たかたです。

[#19092] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/12/01

[#19112] Re: Ruby standard GUI framework? — 中村暁史 Nakamura Akifumi <BXQ04723@...> 1999/12/02

[#19131] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/12/03

[#18948] 他言語との比較 — とみたまさひろ <tommy@...>

とみたです。

18 messages 1999/11/26

[ruby-list:18476] paramclass

From: gotoken@... (GOTO Kentaro)
Date: 1999-11-08 11:50:41 UTC
List: ruby-list #18476
ごとけんです

パラメーター付きのクラスを支援するMix-inモジュールParametric
とParametricのサブクラス生成のためのインターフェイスを含む 
paramclass.rb を送ります。

以下が全機能を使った例。いろいろカッコ悪いので改良は歓迎。

  class Foo
    include Parametric

    def default_parameters      # デフォルトパラメータの配列
      ["foo", 10]
    end
  end

  include ClassParameterizer

  Parametric Foo       # Parametric宣言: 以下でFoo()が使える

  Foo.parameters                 #=> ["foo", 10]
  Foo(10, "foo", 20).parameters  #=> [10, "foo", 20]
  Foo(10, "foo", 20).rootclass   #=> Foo

  foo = Foo(10).new
  foo.parameters                 #=> [10]

-- gotoken


Attachments (1)

paramclass.rb (2.99 KB, text/x-ruby)
=begin

= Mix-in module Parametric

== DESCRIPTION

Parametric is the mix-in module for the parametric class. 
The including class must provide a class method default_parameters.
The method default_parameters must returns the default parameters
as an array and this method is used for the subclass generarion 
by ClassParameterizer::Parametric. 

== CLASS METHOD

: parameters
    Returns parameters as an array. For a Parametric class Foo, 
    the value of Foo(10).parameters is [10]

: rootclass
    Returns the root class. For a Parametric class Foo, the value of 
    Foo(10).rootclass is Foo. 

== METHOD

: parameters
    Returns parameters as an array. Same as parameters class method. 

== EXAMPLE

  class Foo
    include Parametric
    def default_parameters
      ["foo", 10]
    end
  end

  include ClassParameterizer

  Parametric Foo

  Foo(10, "foo", 20).parameters  #=> [10, "foo", 20]
  Foo(10, "foo", 20).rootclass   #=> [10, "foo", 20]

  foo = Foo(10).new
  foo.parameters                 #=> [10]


= Module ClassParameterizer

== DESCRIPTION

ClassParameterizer is the utility module for Parametric class. 

== MODULE METHOD

: Parametric class1, class2, ...
    Works as a declaration.  For each class of options, Parametric 
    defines the same name fuction, which takes options as parameters 
    and returns a class. 

== VERSION

19991108

== AUTHOR

Gotoken <gotoken@notwork.org>

=end

module ClassParameterizer

  ClassParameters = {}
  RootClasses = {}

  def Parametric(*klasses)
    klasses.each do |klass|
      klass < Parametric or
	raise TypeError, "non Parametric class `#{klass}' "
      next if RootClasses.include?(klass)
      cn = klass.name
      eval "def #{cn}(*args); #{cn}.instance_eval{class_generator(*args)} end"
      ClassParameterizer::ClassParameters[klass] = klass.default_parameters
    end
  end

  module_function :Parametric
end

module Parametric

  def Parametric.append_features(mod)
    super mod
    mod.const_set("CLASSLIST", {nil,mod})

    def mod.class_generator(*args)
      klass = self::CLASSLIST[args] || self::CLASSLIST[args] = Class.new(self)
      ClassParameters[klass] = args
      RootClasses[klass] = self
      klass
    end

    def mod.parameters
      ClassParameterizer::ClassParameters[self]
    end

    def mod.rootclass
      ClassParameterizer::RootClasses[self]
    end
  end

  def parameters
    self.type.parameters
  end
end


########## devel test ##########

if __FILE__ == $0
  def xmp(arg) # prints expample code and result line by line
    __res__ = []
    eval arg.gsub(/^(.*)\n?/){"__res__ << (#{$1}).inspect;"}
    arg.split(/\n/).each_with_index{|l,i|
      (puts "\n" ; next) if l =~ /^$/
      print "#{l}\n    ==> #{__res__[i]}\n"
    }
  end

  class C
    include Parametric

    def C.default_parameters
      [100]
    end
  end

  include ClassParameterizer

  xmp <<EOS
  Parametric C

  C.parameters
  C(10).id == C(10).id
  C(20,10) < C
  C(10).parameters
  C(10).rootclass
  C(10).new

  D = C(0)
  Parametric C
  D.id == C(0).id
EOS
end

In This Thread

Prev Next