[#50041] 異なるProcオブジェクトが同じ構造を持つかどうか確かめたい — Tanaka Kazuki <mail@...>
あけましておめでとうございます.
5 messages
2015/01/05
[#50042] Re: 異なるProcオブジェクトが同じ構造を持つかどうか確かめたい
— Nobuyoshi Nakada <nobu@...>
2015/01/05
On 2015/01/05 12:25, Tanaka Kazuki wrote:
[#50046] ruby 2.2のDir.glob大文字小文字区別について — NASU Tohru/那須 亮 <nst329@...>
那須と申します
5 messages
2015/01/06
[#50053] x ||= 1 — "5.5" <5.5@...>
5.5 です。
15 messages
2015/01/13
[#50056] Re: x ||= 1
— "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
2015/01/13
きしもとです
[#50057] Re: x ||= 1
— Nobuyoshi Nakada <nobu@...>
2015/01/13
On 2015/01/13 13:48, KISHIMOTO, Makoto wrote:
[#50071] 世の中のRubyコードをgrepする方法 — Tanaka Kazuki <mail@...>
こんにちは.
5 messages
2015/01/25
[#50082] Re: 世の中のRubyコードをgrepする方法
— Daisuke Furukawa <mogya@...>
2015/02/03
昔 GoogleCodeSearch というそのものズバリのサービスがありました。
[ruby-list:50068] メソッドが無い「ふり」をする方法
From:
"KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
Date:
2015-01-21 12:02:32 UTC
List:
ruby-list #50068
きしもとです
内部(埋め込み)DSLなどで、Stringなど組込みクラスにモンキーパッチ的な
ことをしたいが、他の部分に影響を与えたくない、とします。
ブロックを使って yield の前後でメソッド定義を追加したり削除したりして、
以下のように書けると思うわけですが、目的のコンテキスト以外の場合を
スルーするために、カレントスレッドオブジェクトを使ってチェックする
ことにしました。
# この方法についての議論もありそうですが、ここでの本題ではありません。
本題ですが、こういった場合に、メソッドが無い「ふり」をする方法の
ベストプラクティスとしては、このように method_missing を呼ぶ、
という方法で良いでしょうか。もっと良い方法があるでしょうか? と
いうのが質問です。
def with_to_yaml
cur_th = Thread.current
String.__send__(:define_method, :to_yaml){
unless Thread.current.equal? cur_th then
method_missing :to_yaml
end
return self
}
yield
String.__send__(:remove_method, :to_yaml)
end
with_to_yaml {
p "hoge".to_yaml
}
# remove_method は ensure 節で実行するようにしたほうが
# 良いですね...