- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ruby 毎回同じ様なreplace文を書くのイヤ)
Rubyで同じ様なreplace文を簡単に書きたい
このQ&Aのポイント
- Rubyで同じ様なreplace文を簡単に書く方法を教えてください。
- 質問者はdb.executeメソッドの引数を可変のパラメータとして渡したいと考えています。
- 具体的には、replaceメソッドにテーブル名とキーの配列、値の配列を渡して、db.executeメソッドのパラメータに展開したいとのことです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そのまま、可変長引数として取り扱えますよ。 http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html#method 受ける側のメソッド内で*を外すと、Array扱いになります。 また、Arrayやらといったオブジェクトに*を付けてやると、他のメソッドへバラけたパラメータとして渡すことができます。 http://ideone.com/jbWZX 記載された例で行くと、 (動作チェックはしていません。「v」の扱い方についてだけです) # このように使いたいなら replace('table',%w(a, b, c, d, e, f, g),[va, vb, vc, vd, ve, vf, vg]) # こうします。 def replace(table, k, v) db.execute('replace into ' + table + '(' + k.join(',') + ') values('+ k.collect {'?'}'.join(’,’) +')' , *v) end # このように使いたいなら replace('table',%w(a, b, c, d, e, f, g), va, vb, vc, vd, ve, vf, vg) # こうします。 def replace(table, k, *v) db.execute('replace into ' + table + '(' + k.join(',') + ') values('+ k.collect {'?'}'.join(’,’) +')' , *v) end
お礼
sholmesさん ご回答ありがとう御座いました。 おかげさまで、上手く出来ました。