KazuminEngine

プログラマーの日記

Rubyのスコープでハマったこと

なにこれ

Ruby言語でtwitterスクリプトを書いている時にハマったこと。それの、解決策をlogっとく。 初心者レベルのことを書きます。

先にざっと解決策を述べると

define_method

を使えば良い。

たとえば、

hoge = "hoge"

def piyo(huga,nanntyara)
    何か処理
end

piyo("huga","nanntyara")

とか書いて、hogeをpiyoの引数として追加したい

しかし、defに入ると完璧にscopeを離れる。

その解決策として「piyoの引数を増やす」ってのを思いついた。

でも、ダサいと思ったので、defのスコープを外したい。

前に勉強したdefine_methodを思いついたのだが、あんまり覚えていなくて

hoge = "hoge"

define_method piyo(huga,nanntyara)
    何か処理
end

piyo("huga","nanntyara")

と、意味のわからないことを書いてしまった。

しっかり調べると

hoge = "hoge"

define_method(:piyo) do |huga,nanntyara|
    何か処理
end

piyo("huga","nanntyara")

と書くようだ define_methodで問題が解決できた。

やっぱり学んでも、使わなければ忘れちゃいますね。

そうゆえば、define_methodを使っちゃうと

スコープが壊れちゃうので、あまり使っちゃいけなかったはず?