重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

db = SQLite3::Database.new('hoge.db')
で、

db.execute('replace into table01 (a, b, c, d, e, f, g) values(?, ?, ?, ?, ?, ?, ?)',va, vb, vc, vd, ve, vf, vg);

とかって書いてるのですが、
これを、

def replace(table,k,v)
db.execute('replace into ' + table + '(' + k.join(',') + ') values('+ k.collect {'?'}'.join(’,’) +')' , ここどうかいたら??)
end

みたいな事を考えたのですが、vって配列でもらった値をばらばらにdb.executeのパラメータに渡したいのですが、
できませんでして、

replace('table',%w(a, b, c, d, e, f, g),[va, vb, vc, vd, ve, vf, vg])

みたいに使いたいです。

引数が可変のパラメータをそのまま、つぎの関数に渡すみたいな。

なんか、ラクする方法ないですか?

ご教授の程、宜しくお願いいたします。

A 回答 (1件)

そのまま、可変長引数として取り扱えますよ。


http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef …

受ける側のメソッド内で*を外すと、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
    • good
    • 0
この回答へのお礼

sholmesさん

ご回答ありがとう御座いました。

おかげさまで、上手く出来ました。

お礼日時:2011/12/27 14:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!