[#15841] abstract method — Tanaka Akira <akr@...17n.org>
最近、abstract method が欲しくなり、次のようなものを書きました。
[#15846] Ruby M17N request — "K.Kosako" <kosako@...>
今書いているライブラリを、あらかじめRuby M17Nに対応させておこうとして、
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1012831868.125952.28017.nullmailer@ev.netlab.jp>から
<20020205045749.0AAA015B@helium.ruby-lang.org>から
At Mon, 25 Feb 2002 19:57:05 +0900,
At Mon, 25 Feb 2002 21:00:46 +0900,
まつもと ゆきひろです
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1014656883.878972.23459.nullmailer@ev.netlab.jp>から
At Mon, 25 Feb 2002 19:57:05 +0900,
At Sun, 3 Mar 2002 07:15:40 +0900,
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1015574625.778743.29060.nullmailer@ev.netlab.jp>から
まつもと ゆきひろです
なかだです。
nobu.nakada@nifty.ne.jpさんの
なかだです。
nobu.nakada@nifty.ne.jpさんの
なかだです。
なかだです。
nobu.nakada@nifty.ne.jpさんの
あおきです。
なかだです。
[#15855] Re: [ruby-cvs] ruby: * io.c (fptr_finalize): should raise error when fclose fails. — nobu.nakada@...
なかだです。
[#15861] syscall — nobu.nakada@...
なかだです。
西山和広です。
なかだです。
In article <200202091509.g19F9mO16072@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
なかだです。
[#15867] [BUG?] include after module definition and extend module — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
In article <1014021831.527593.5892.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1014100898.366150.14204.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1014126659.698034.15364.nullmailer@ev.netlab.jp>,
[#15903] -L option in extmk.rb — nobu.nakada@...
なかだです。
[#15914] making net/*.rb grok URI — "Akinori MUSHA" <knu@...>
net/*.rb モジュール群をぜひとも標準添付となった URI クラスに
At Mon, 18 Feb 2002 04:33:42 +0900,
あおきです。
At Mon, 18 Feb 2002 15:24:22 +0900,
あおきです。
高橋征義です。
In article <200202190432.NAA18796@mx.inac.co.jp>,
高橋征義です。
In article <20020221020159R.maki@rubycolor.org>,
なかだです。
In article <200202202350.g1KNoc731179@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200202210553.g1L5rk713061@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
In article <1014277711.428770.25909.nullmailer@ev.netlab.jp>,
[#15918] win32 方面 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#15988] Re: [rubyist:1097] Re: % 記法 — nobu.nakada@...
なかだです。
なかだです。
西山和広です。
まつもと ゆきひろです
なかだです。
[#15994] subdir in mkmf.rb — nobu.nakada@...
なかだです。
[#16040] Digest::MD5 SEGV (ruby_1_6) — m_seki@...
[#16049] defined? autoload constant — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
なかだです。
けいじゅ@日本ラショナルソフトウェアです.
なかだです。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#16050] ParseDate.to_time — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#16059] New Struct — Shin-ichiro HARA <sinara@...>
原です。
[#16068] UNIXSocket#{send_io,recv_io} — Tanaka Akira <akr@...17n.org>
しばらく前にふと気が向いて UNIXSocket#{send_io,recv_io} というものをでっ
まつもと ゆきひろです
In article <1014700933.711454.28068.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
[#16082] Array#select without block — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
[#16102] No trace_func event at if-elsif-else line — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。どうせ一年も先の話なのでのんびりと。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
[#16112] ruby 1.6.7 preview 1 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#16126] patch for gdbm, dbm and sdbm — Koji Arai <JCA02266@...>
新井です。
[#16134] Defining (Python) Source Code Encoding — TAKAHASHI Masayoshi <maki@...>
高橋征義です。ruby-list の「localized document」ともやや関係あり?
新井です。
なかだです。
[#16138] Hash implementation — MORITA Naoyuki <naohaq@...>
はじめまして、森田と申すものです。
[#16145] ruby 1.6.7 (2002-02-27)/marshal data too short (ArgumentError) — m_seki@...
[ruby-dev:15841] abstract method
最近、abstract method が欲しくなり、次のようなものを書きました。
class AbstractMethodCallError < NotImplementedError
end
class Module
AbstractMethods = {}
def define_abstract_method(name)
name = name.to_s.intern unless Symbol === name
AbstractMethods[self] ||= []
AbstractMethods[self] << name
self.class_eval {
define_method(name) {raise AbstractMethodCallError.new(name.to_s)}
}
end
def abstract_methods
methods = []
ancestors.reverse_each {|mod|
methods -= mod.instance_methods.map {|name| name.intern}
methods |= AbstractMethods[mod] if AbstractMethods.include? mod
}
methods
end
def abstract?
!abstract_methods.empty?
end
end
具体的には次のように unit test で検査することを想定しています。
class A
define_abstract_method :a
...
end
class C < A
...
end
if __FILE__ == $0
...
assert_equal([], C.abstract_methods)
...
end
個人的に、あとは abstract (method をもつ) class を new (allocate?) す
ると警告が出ると完璧だと思っているのですがそれはさておき、こういう機能
が Ruby 本体にあると便利だと思うんですが、どうでしょう?
そもそもの動機は、(ABNF で構文木をたどるために) visitor パターンを使う
必要があり、各 visitor の visit_xxx method を全部ちゃんと定義したかど
うか目視で確認するのが面倒だったからです。ちなみにその visitor パター
ンの場合は Class.inherited を利用して自動的に visit_xxx をabstract
method として定義したりします。
# なお accept method も自動生成します。
ついでにいえば、サブクラスで当然再定義されるべきメソッド - template パ
ターンの primitive operation とか - が存在する(ないしは多用する)なら、
abstract method だと明示してやったほうがいいんじゃないかと思うんですが。
注: Ruby 本体に入らない場合、ABNF との抱き合わせで添付ライブラリ行きの
予定です。
--
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)