[ruby-trunk - Feature #10059] [PATCH and SUGGEST] 代数構造を記述する時にメタ力ですが

Issue #10059 has been updated by Naohisa G…

RDocの件について、前述の"def xxx end if false"のように常に偽になるなら話は簡単ですが、極端な場合だと “def xxx
end if rand(5)<3” のようにランダムにメソッド定義が発生するコードも可能ですし、さらに rand関数を再定義するのも可能です。

このような場合も考えると、現在のRDocの挙動(defによるメソッド定義に書かれたドキュメントは詳細な条件分岐は見ずに使う)は順当だと思っています。

# このメソッドのRDocはどうする?
def abcd(e="f") end if rand(5)<3

# rand は常に10を返す関数と定義
def rand(*arg); 10; end

# rand(5)>5 は、普通(Kernel.randが呼ばれる場合)は必ず偽になるが、
# このコンテキストではrandは常に10を返すと定義したので、
# rand(5)>5は常に正になる。
# では、このメソッドのRDocはどうする?
def efgh(i="j") end if rand(5)>5

Feature #10059: [PATCH and SUGGEST] 代数構造を記述する時にメタプログラミングは非常に非常に強力ですが

  • Author: gogo tanaka
  • Status: Feedback
  • Priority: Low
  • Assignee:
  • Category:
  • Target version:

タイトルに書きました通り、代数構造を記述する時にメタプログラミングは非常に非常に強力で

保守性や可読性を著しく推し上げます. 著しくです. これは代数的な性質(演算子の対称性、可逆性など)を記述出来る事に起因します.

しかし議論を呼びそうなのと取り分け優先度が高い訳でないので、提案レベルで簡単なPATCHを投げさせて頂きます.
お手透きの時にでも目をお通し下さい.

—Files--------------------------------
using_define_method_for_Vector_arithmetic.patch (1.29 KB)
using_define_method_for_Scalar_arithmetic.patch (1.04 KB)
using_define_method_for_Matrix__arithmetic.patch (2.04 KB)