タグ「Memo」が付けられているもの

【覚書】[Ruby]続・トップレベルに定義したメソッドと同名のメソッドをクラスで定義した場合 - 研究室

本日(日付が変わっちゃったので正確には昨日)、第14回Ruby東海勉強会に行ってきました。 そこでヒントをもらったので、半年前の記事に補足。

[おさらい]半年前に考えてたこと

def meth(a) p a; end
class Clazz
  def meth
    《トップレベルで定義した同名メソッドを self を引数に渡して呼び出したい!》
  end
end

こんなことしたい場合に、どうすれば良いのか?

↑こんなことを考えていました。

ポイントは以下の通り:

  • トップレベルで定義したメソッド = Kernelモジュールで定義されたprivateメソッド。
  • Kernelモジュールで定義されたメソッドと同名のメソッドを定義 = メソッドのオーバーライド。
  • privateメソッド = レシーバを指定して呼び出すこと(obj.methのように)が出来ない!(Rubyの仕様)

【覚書】[Ruby]トップレベルに定義したメソッドと同名のメソッドをクラスで定義した場合 - 研究室

ちょっとばかしハマったのでメモ。

トップレベルであるメソッドを定義します。
それと同名のメソッドをあるクラスでも定義します。
例えば、

def meth(a) p a; end
class Clazz
    def meth; p self; end
end

こんな感じ。

このとき、クラス Clazz 内で、トップレベルのメソッド meth(a) を呼ぶにはどうしたら良いのか?
もっと言うと、同名のメソッド内で

def meth(a) p a; end
class Clazz
    def meth
        《トップレベルで定義したメソッドを self を引数に渡して呼び出したい!》
    end
end

こんなことしたい場合に、どうすれば良いのか?

...あ、もちろん、
「トップレベルで定義したメソッドと同名のメソッドを定義して、なんてそんな変な設計にしない」
というのが正解なのは分かっています。
仮に、あくまで仮に、そんな事態に陥った時の解決法は? ということですので。

ブログ

研究室
書斎

タグクラウド

最近のブログ記事

Ruby東海第15回勉強会
研究室ブログ上
【覚書】[Ruby]続・トップレベルに定義したメソッドと同名のメソッドをクラスで定義した場合
研究室ブログ上
第39回FLOSS桜山勉強会
研究室ブログ上