2011年2月1日

Rubyのメソッド引数はおいくつまで?

RTで流れてきた @uupaa の「引数が100個を超えると~」をだしに、Rubyのメソッド(関数みたいなものだよ!)の引数の個数の限界を調べようとしてみた一連の流れ。
4
ArcCosine@5G @ArcCosine

@uupaa 最長不倒関数で倒すんだっ

2011-02-01 17:33:40
ArcCosine@5G @ArcCosine

@uupaa これで1関数なんですって。初めて見たときリアルにお茶吹いた。

2011-02-01 17:42:50
ArcCosine@5G @ArcCosine

まあ、僕も最長不倒関数並に長いコード書いてますが、今現在。

2011-02-01 17:43:25
えんじに🐈にゃーん💉💉 @uupaa

@ArcCosine (ε・◇・)з 引数が125個で1万行ぐらいのCで書かれた闇関数をしっておりまふ

2011-02-01 17:45:04
ArcCosine@5G @ArcCosine

@uupaa ひゃく・・にじゅう・・・ご・・・? そ、それは闇プログラマーにしか扱えない魔道書だ!

2011-02-01 17:46:30
ArcCosine@5G @ArcCosine

ってか、引数が10超えたあたりで構造体を使うという発想は無かったのか?!

2011-02-01 17:46:56
ArcCosine@5G @ArcCosine

もしかして:構造体で125個の引数

2011-02-01 17:47:30
えんじに🐈にゃーん💉💉 @uupaa

(ε・◇・)з 引数が100個超えるとコンパイラが「おまえ正気か?」風味な警告だすんやで~

2011-02-01 17:47:46
ArcCosine@5G @ArcCosine

闇関数すぎるので僕はそっと記憶の扉を閉じた。

2011-02-01 17:48:07
にゃんだーす☆わん @tadsan

Ruby1.9のメソッドは117個まで引数を取れるらしい。が、こんなに引数を要求するならふつうはArrayかHashを使ふよなあ。 http://ideone.com/pWkQL

2011-02-01 18:22:41
斎藤ただし, Tadashi Saito @_tad_

@tadsan よく見てください、キーワード"do"を変数に仕様としたからそこで止まってるだけですw

2011-02-01 18:23:39
⬅️⬇️⬆️➡️ @mickey24

@tadsan doが予約語だから失敗してるだけじゃないですかね.

2011-02-01 18:23:43
にゃんだーす☆わん @tadsan

オーケー、道理でrescueで拾ってくれないわけだ。

2011-02-01 18:25:52
にゃんだーす☆わん @tadsan

ideoneでは1583で打ち切られたけど、「Rubyに引数の制限はない」がFAなのかな。 http://ideone.com/RIrrR

2011-02-01 18:27:43
斎藤ただし, Tadashi Saito @_tad_

@tadsan @mickey24 変数名にかならず(キーワードに出てこない)"_"を入れるようにして自分で試したら、1.9.2ではざっと4500引数超えても大丈夫ですね。

2011-02-01 18:27:49
にゃんだーす☆わん @tadsan

文字列をnext!で作って"do"で引っかかる発想はなかった。次にevalで何かコードを生成するときは忘れないやうに。

2011-02-01 18:33:00
にゃんだーす☆わん @tadsan

「Rubyのメソッド引数はおいくつまで?」をトゥギャりました。 http://togetter.com/li/95599

2011-02-01 18:57:20
にゃんだーす☆わん @tadsan

註釈: next! は 'a'なら'b'、'1'なら'2'、'ax'なら'ba'と変換してくれる、Rubyの超べんりメソッド。

2011-02-01 19:03:33
にゃんだーす☆わん @tadsan

註釈: 「予約語」プログラムで変数名につかっちゃだめな文字のこと。Rubyだと "do" が変数名に使用できない(メソッド名にはできるよ!)。

2011-02-01 19:05:46
にゃんだーす☆わん @tadsan

註釈: 最初のコードが117個で止まってしまった理由: a,b,c,...,aa,ab,ac,...,da,db,dc,...といっぱい文字列を作ってevalで実行して、dl,dm,dnときたことろで doはプログラム的に意味のある単語なので構文エラーになりましたとさ。

2011-02-01 19:16:23

コメント