http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html
メソッド定義式内で呼べるそうです。
なので メソッド定義式を作ってそれから呼び出すようにしましょう。
ご回答有り難うございます。具体的なソースコードでご回答頂けると助かります。
▽2
●
a-kuma3 ●290ポイント ベストアンサー |
ちょっと無理矢理ですけど、こんな感じ。
#!/usr/bin/env ruby def deftest (str = nil) unless str.nil? then str.gsub("yamada", "sato") else self.gsub("yamada", "sato") end end name="yamada taro" p deftest(name) p name.deftest
引数が nil の場合には、self を対象にするようにしてます。
引数無しで呼び出したときには、やっぱりエラーになっちゃうので、デフォルト引数の指定もしました。
無理矢理感が伝わるでしょうか?
トップレベルにメソッドの定義をすると、スコープ的にはどこからでも呼び出せますが、対象となるオブジェクトがあいまいになってしまいます。
あくまで、非OO な言語の関数やサブルーチンとして使う方が良いでしょう。
それとも、こちらの方が良いでしょうか。
#!/usr/bin/env ruby def deftest str str.gsub("yamada", "sato") end class String def deftest gsub("yamada", "sato") end end name="yamada taro" p deftest(name) p name.deftest
実装が散らばるのも、気持ち悪いんだよなあ...
後、引数の変数を破壊するのは、どうかなと思って、gsub! → gsub にしてますが "yamada taro" の内容を破壊して良いのであれば、両方とも破壊的なメソッドを使ってください。
#!/usr/bin/env ruby def deftest str str.gsub("yamada", "sato") end class String def deftest Kernel.send(:deftest, self) end end name="yamada taro" p deftest(name) p name.deftest