ユーザー定義関数の引数について(質問掲示板

投稿: 128 mini fragile 投稿:2012/04/25 22:34:25(最新:2012/04/27 14:02:27)
ノベルゲーム制作にあたり
def pos(x,y,n,m)
L = createArray()
L[0] = x + n
L[1] = y + m
return L
end

の様にdef文で ある程度の関数を作ったりしますよね?
その際に引数の個数を固定しない方法はありますか?

...言葉で説明しにくいので
speak("銀行")
-->引数は1つ
speak("所持金:",mon,"円")
-->引数は3つ

pos(2,4,8,3)
-->引数は4つ
pos(1,3,5,7,8)
-->エラー

ということで引数の個数が変わっても対応できる方法はありますか?


一応検索は掛けましたが,漏らしていたらすいません。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

128 mini fragile(投稿日:2012/04/27 14:02, 履歴)
rurun9様,とりか様 回答ありがとうございます。
引数に書き込んだ記号がそのままdef内で使われるので無理だと思ってましたが、
上限から減らす形をとればよかったのですね。
ありがとうございました。
    mini とりか(投稿日:2012/04/26 06:52, 履歴)
def pos(x,y,n,m,p1,p2,p3) ←使わない引数もあらかじめいれちゃう方法とか
L = createArray()           呼び出しはpos(1,2,3,0,0,0)や
L[0] = x + n                          pos(1,2,3,7,8,0)で
L[1] = y + m                引数の最大は指定する必要があるけど
return L                    個数が代わっても対応できるようになるとか
end


def pos(x,y,n,m,p1,p2,p3,pp) ←あたえた引数で場合分けする方法とか
  if pp = 0                    pp(判断用の引数)で場合分けとか
    L = createArray()          
    L[0] = x + n               引数の個数がどんなに増えても
    L[1] = y + m               対応できる方法はなさそう
    return L
  elsif pp = 1
    L = createArray()          例外として配列を引数にとれば
    L[0] = x + p2              実質無限個の引数が取れるかも
    L[1] = y + p3              
    return L
  end
end
Nyan mini rurun9(投稿日:2012/04/25 23:11, 履歴)
んー。近い事はできる…?
def qwe(a,b)
#二つ目の引数bに注目してみる実験
 if !b
  z=a
 else
  z=a+b
 end

 return z

end #qwe()終

speak("qwe(3,7)=", qwe(3,7) ) #10
speak("qwe(5)=", qwe(5) ) #5
speak("qwe(8,false)=", qwe(8,false) ) #8
speak("qwe(9,true)=", qwe(9,true) ) #10 ◆
speak("qwe()=", qwe() ) #null ◆
goBadEnding()
引数が不特定個数でたくさんあり過ぎると無理だけど、与えられる形式(数値、文字、フラグ)が決まってるならば、なんとか対応できそう

注意点はやはりtrueをもし計算しちゃうと1扱いな辺りでしょーか
そりゃ0か1かのコンピュータですもんね