From: Yusuke ENDOH Date: 2010-12-19T23:22:05+09:00 Subject: [ruby-dev:42811] Re: [Ruby 1.9-Feature#3647] Array#sample(n, replace=false) 遠藤です。 2010年12月11日23:38 Yukihiro Matsumoto : > まつもと ゆきひろです > > In message "Re: [ruby-dev:42751] Re: [Ruby 1.9-Feature#3647] Array#sample(n, replace=false)" > ? ?on Sat, 11 Dec 2010 23:04:11 +0900, Masaya TARUI writes: > > |失礼ながら特に議論した形跡が分からなかったんですが、 > |どこかに合意が取れない項目があったんでしょうか? > > 「本当に必要なの」ってところがですかね。 同じく、この機能は (1..n).map { ary.sample } で済むので、 ary.sample(replace: true) じゃ字数も変わらないし、本当にいるのかなという気がします。 まあ Array#sample 自体も ary[rand(ary.size)] で済むといえば 済むのですが。 > |何もないよりはキーワード引数でもあった方がいいとは思っていますが、 > |想定してるものは、最初のむらけんさんの提案の方です。 > | > |[1,2,3,4].sample ?#=>1個なので再抽選関係なし > |[1,2,3,4].sample(3) #=>再抽選なし > | > |ここまでが現在の仕様ですが、 > | > |[1,2,3,4].sample(3,true) #=>再抽選あり > |[1,2,3,4].sample(3,false) #=>再抽選なし > | > |が追加になります。 > > 反対します。trueの意味がなんであるか、絶対にわからなくなるか > らです。たとえば現在でも instance_methods は真偽値をオプショ > ンとして受け付けますが、trueの時にどう振舞うかは私でさえ覚え > ていられません。これは失敗だったと思っています。 まつもとさんと同じでこれには反対です。 入れるとしたら sample(何かキーワード: true) だと思うんですが、 元の提案の "replace" は、非ネイティブかつ統計用語に詳しくない 私としては、選択された要素を破壊的に取り除くように思えてしまう (つまり以下の挙動を期待する) ので嫌らしいです。 ary = [1, 2, 3] p ary.sample(replace: true) #=> 1 p ary #=> [2, 3] よく考えるとこの挙動は別に replace してないんですが、replace には破壊的な語感がありすぎてこんなふうに思ってしまいます。 # 余談ですが、この挙動はこの挙動で欲しい。 duplication: true とかどうなのかなあ。ruby-core に持っていくと いいかもしれないですね。英語圏だと replacement で完全制覇されて いるという噂もありますが。 -- Yusuke Endoh