Ruby 初心者スレッド Part 65

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f80-JI52)
垢版 |
2018/12/22(土) 04:43:34.03ID:84E3pYZa0
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ

質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 64
https://mevius.5ch.net/test/read.cgi/tech/1535797516/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/

Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/06/04(火) 21:39:18.98ID:jFAGFsyFa
そのMarshalのコードはかなり無駄だがファイルの内容が小さいから富豪的にやってるだけだと思う
実際はちゃんとセーブデータから該当するデータを読むという処理にすべき
2019/06/04(火) 21:59:55.03ID://1XsOfQ0
それに何回も同じファイルへの読み込むのは、
他のプロセスで、そのファイルを書き換えているからかも知れない

だから、ひょっとして書き変わっているかも知れないから、
出来るだけ新しいファイルを、読み込もうとしているのかも知れない

結局こういうように、仕様に対する推測ばかりするようになる

バグのほとんどは設計段階で生じる。
仕様がおかしかったら、必ずクソコードになってしまうw

これはもはや、プログラミングではない!
このように漏れらはいつも、設計・仕様の話ばかりしている。
顧客の要求定義も知らないのにさ!ww

漏れは、こういう仕事をさんざんやってきた。
その度に同僚同士で、クソコードを分析しても得られるものはないし、
時間の浪費だよねって、常々言い合ってきたw

お金をもらえるからやってるだけで、勉強にはならない。
勉強効率で言えば、1/100 とか

重箱の隅をつつくような断片的な知識は、覚えられられないし転用できない。
体系的に学ぶ必要がある
2019/06/04(火) 22:59:30.82ID:0PWK+f1w0
fileに複数のオブジェクトがdumpされてて
それを順番にloadしてるだけだぞ
2019/06/04(火) 23:41:11.09ID://1XsOfQ0
Marshal.load(port, proc = nil) -> object

port は、String か IO と書いてある

同じファイルを何回も読み込んでいるのではなく、
複数のオブジェクトがある場合、
一度にすべてを読み込まず、1つずつ順番に読み込んでるという事かな?

結局こういうように、どう作っているのか、他人の仕様の推測ばかりするようになる

このように漏れらはいつも、設計・仕様の話ばかりしている。
顧客の要求定義も知らないのにさ!ww

結局、他人がどう作っているのかなんて、わからない!
所詮どこまで行っても、推測に過ぎない!
2019/06/05(水) 01:28:30.54ID:UB83J14X0
仕様は>>399が(中略)したところに書いてあったぞ
2019/06/05(水) 01:30:04.71ID:Oo3xyqZm0
全部コピペしてくれ
気になって寝られない
2019/06/05(水) 02:34:30.81ID:UjRB/6p50
>>415
APIの仕様は文書で調べればいいだけと自分で>>411で書いているくせに、>>415では何で頓珍漢な当て推量をする流れなんだ?
いつもどこかで聞いてきたようなお題目を並べてはいるが、上っ面の字面だけを覚えているだけだろう。本人は実践できてないし理解もしていない。
419402 (ワッチョイ 6a2c-n0I8)
垢版 |
2019/06/05(水) 22:44:36.03ID:9aT8oaGi0
Marshal.load(port, proc = nil) -> object
port は、String か IO と書いてあって、仕様を知らないと、どちらかわからないから!

漏れの印象では、Marshal は、dup, clone などのdeep copy 関係のクラス

質問者のは、文字列化して外部プロセスに送ったり、
外部プロセスから文字列をもらって、オブジェクトを構築したりする用法かな?

JSON.parse, stringify みたいな感じなのかな?

「Ruby逆引きハンドブック」では、分散(distributed)Ruby, dRuby を使ってる。
外部ホスト・プロセスで動く、Rubyとの通信

dRubyでは、Marshalによる値渡しが基本みたい
2019/06/06(木) 12:10:33.65ID:UkK5klaO0
知らん人多いのか・・・びっくりだ

STDIN.getsなんかと同じで必要な文だけ読み取ってるだけだぞ
2019/06/06(木) 14:41:45.27ID:fpHkuk9sa
Marshalとか今時使うもんじゃない
2019/06/07(金) 01:21:32.05ID:UE5bXA580
今時は何使うん?
423デフォルトの名無しさん (アウアウエー Sa93-dZrz)
垢版 |
2019/06/07(金) 01:23:56.05ID:yhNlt0n8a
Rubyとか今時使うもんじゃない
2019/06/07(金) 01:42:47.01ID:UE5bXA580
Marshalでファイルに複数のオブジェクトを読み書きできるのか
てっきり1個のオブジェクトに固めてから使うのかと思った
リファレンスマニュアルにはそのあたり書いてないからね
2019/06/07(金) 10:49:24.42ID:Eixypjmyd
CSV出力処理でメモリが上がってしまうことが多く、対策しようとしているのですが良い方法はありますか?
少し調べて、pluckメソッドを使おうと思ったのですが、ソート順が想定通りにならなかったりしそうだったので、引き続き調べてみています。
2019/06/07(金) 11:24:15.29ID:3EE3ZH/10
出力するのにソート関係ないし
質問自体が初心者だなぁ(笑)
427デフォルトの名無しさん (ワッチョイ 6b2c-MqbY)
垢版 |
2019/06/07(金) 22:37:13.77ID:wtNNzOUb0
CSV.foreach で、ファイルを1行ずつ処理できる

このメソッドは、たぶん1行ずつ読み込んでは、
そのデータを捨ててと言うのを繰り返すのかな?

でも、ソートするなら、すべてのデータがメモリ内に存在しないといけないのでは?
だから、全行をメモリ内に読み込むことになる!
2019/06/08(土) 00:20:08.05ID:0P3wY/7I0
Python では、collections.Counter で、要素の出現回数を数えられるけど、
Ruby でも、簡単にできる方法ある?
普通には、Hash に入れながら、回数をインクリメントしていくけど

import collections

l = [ 'a', 'b', 'c', 'b', 'a' ]
c = collections.Counter( l )

print( c )
# Counter( { 'a': 2, 'b': 2, 'c': 1 } )
2019/06/08(土) 02:34:37.85ID:0P3wY/7I0
>>428
自己レス

配列に含まれている重複している数を数えるには?
https://teratail.com/questions/91229

l.each_with_object( Hash.new( 0 ) ){ |e, h| h[ e ] += 1 }

Python の、こういうのは無さそう。
c = collections.Counter( l )
2019/06/08(土) 03:19:18.26ID:s7niJl7f0
["a", "b", "c", "b"].tally
#=> {"a"=>1, "b"=>2, "c"=>1}
2019/06/08(土) 03:54:40.62ID:Vf2EEML20
>>425
csvを全部読み込んで処理しようとするとそうなるのは避けられない、何らかの工夫をするしかない
一行、数行ずつ処理し、終わるごとに配列、hashをクリアしていけばいいが、出来ない場合ね

csvを二回読み、一回目で必要なキーや情報だけ集めて一度csvをclose、
2回目にその情報を使って一行ずつ処理するなど
2019/06/08(土) 05:57:15.56ID:2hi7btAr0
>>425
MapReduceみたいに複数のマシンに分散させるとか
433デフォルトの名無しさん (ワッチョイ 6b2c-MqbY)
垢版 |
2019/06/09(日) 05:48:42.16ID:rn4C+nSw0
[[1, 2], [3, 4]] の外側の[ ] を外すには、どうすれば良いですか?
[1, 2], [3, 4] のようにしたい

flatten では、内側の[ ]が無くなる

ary = [[1, 2], [3, 4]]

p ary.flatten( 1 )
#=> [1, 2, 3, 4]
2019/06/09(日) 05:57:04.68ID:Zvq68IITM
>>433
あちこちでアホみたいなレスしてRubyの評判を落とすのをやめたら教えてあげるよ
2019/06/09(日) 13:07:01.08ID:owsNLjD/0
>>433
ary[0] or ary.first
2019/06/09(日) 13:42:07.09ID:Y6d7d5Fn0
>>433
意味がわからん。
437デフォルトの名無しさん (ワッチョイ eb7c-yvwO)
垢版 |
2019/06/09(日) 14:03:11.38ID:V8qyq4Ge0
*[[1, 2], [3, 4]]
438デフォルトの名無しさん (スプッッ Sddb-Gzfa)
垢版 |
2019/06/09(日) 14:33:40.10ID:FDYkpc7vd
オススメな本ある?
2019/06/09(日) 14:58:26.11ID:VJkUGCEU0
>>438
アマゾン/dp/B00ICKLC2A
440デフォルトの名無しさん (スプッッ Sddb-Gzfa)
垢版 |
2019/06/09(日) 20:52:05.62ID:FDYkpc7vd
>>439
Rubyで作る奇妙なプログラミング言語-〜ヘンな言語のつくりかた〜
これ?
2019/06/09(日) 21:04:35.15ID:VJkUGCEU0
>>440
そうです、結構おもしろかったですよ
442デフォルトの名無しさん (スプッッ Sddb-Gzfa)
垢版 |
2019/06/09(日) 21:45:31.88ID:FDYkpc7vd
>>441
Kindleバージョンしかないの?
2019/06/09(日) 21:51:40.23ID:VJkUGCEU0
>>442
書籍で出ていましたよ、私が持っているのは書籍の方
444デフォルトの名無しさん (ワッチョイ ebb6-fbqF)
垢版 |
2019/06/09(日) 21:55:27.58ID:W83DJxDE0
【実体験】ブログを1,000記事ほど書いたら、月300万くらい稼げた話
https://www.youtube.com/watch?v=GmVulh282ps&;t=604s
【報告】ブログで「月収1,000万」を達成できました【方法を解説する】
https://www.youtube.com/watch?v=pgjcuLp8wt0
年間ほど努力したら「年収3,000万」になったので、経験談を語る
https://www.youtube.com/watch?v=oV_SY-a1lMs
期間工ブログの収入は1500万円でした。【フリーランスの現実&底辺からの復活編】
https://www.youtube.com/watch?v=aijLjFLOuC4
年商1300万のプロブロガーの初心者時代から今までの軌跡
https://www.youtube.com/watch?v=UMiF4T2EO9o
【収益報告】実働月10hでも大金稼ぐ方法を解説【年収6,000万】
https://www.youtube.com/watch?v=o2ISWP-VZsw&;t=288s
無料ブログは稼げない。稼ぐならオススメはWordPress一択の理由
https://www.youtube.com/watch?v=o8oUe3JS-lg
445デフォルトの名無しさん (ワッチョイ 115f-Gzfa)
垢版 |
2019/06/09(日) 22:06:11.67ID:+p5uJAry0
>>443
2008年発売の書籍!
2019/06/09(日) 22:58:24.18ID:rn4C+nSw0
おすすめ本は、このスレの最初の方に、まとめてある!
2019/06/09(日) 23:32:37.79ID:+p5uJAry0
おお!ありがと!
448デフォルトの名無しさん (ワッチョイ 5b33-2qry)
垢版 |
2019/06/13(木) 15:09:32.77ID:mYw2PK9v0
標準ライブラリに仮想環境を構築するモジュールがあれば教えてください
2019/06/14(金) 00:20:43.41ID:gXbRy3uY0
まさか、標準ライブラリには無いだろ

Chef, Vagrant とかだろ
2019/06/14(金) 11:13:41.68ID:d7JGEW920
物議を醸すパイプライン演算子
2019/06/14(金) 12:11:55.47ID:/GXcsjP70
sh「パイプライン演算子とはようやくシェルスクリプトに追いついてきたか?」
452デフォルトの名無しさん (ワッチョイ 5b33-2qry)
垢版 |
2019/06/14(金) 17:43:29.05ID:2ICDzfK10
>>449
Pythonのvenvみたいなのはないんですか?
2019/06/14(金) 21:43:43.43ID:gXbRy3uY0
rbenv, nodenv などのanyenv だろ。
ただし、anyenv は、シェルスクリプトで書かれているらしいから、Linux/Mac でしか使えない

Windows では、仮想OS を使うか、
Windows10・WSL 上のLinux で動かしている、記事もある

Windows の場合、ユーザー環境変数PATH を手動で切り替える方法もある。
PowerShell(PS) で、そういうスクリプトを書くとか

ruby.exe のある場所。
C:\Ruby24-x64\bin
C:\Ruby25-x64\bin

PS で、環境変数PATHは、; で区切り。
$env:Path.split(";")

#=> C:\Ruby24-x64\bin
2019/06/14(金) 21:51:30.95ID:gXbRy3uY0
|> は、関数型言語、Elixir のパイプ演算子

メソッドチェーンを発展させて、オブジェクト指向から、関数型へ近づく。
マルチコアCPU の時代への適用
2019/06/14(金) 22:31:52.50ID:Guh3Kqz10
パイプ演算子ってドットのエイリアスなの
それパイプ演算子じゃない
2019/06/14(金) 22:59:33.98ID:cwcbHRc8a
Rubyは第一級関数じゃないからパイプ演算子とは極めて相性が悪い
Rubyで a |> b と書いたら、(このRubyキチガイを除く)まともな頭で普通に類推したら b()(a()) の意味になっちゃうからね
括弧省略が鬼門
2019/06/15(土) 00:21:14.51ID:ZZVwfMZi0
こういうの見ると型は必要だよなあと感じる
2019/06/15(土) 02:09:14.95ID:aR6/lbk80
ふうむ
では b <| a ならどうだろう
2019/06/15(土) 08:12:23.99ID:ZCtqwPNW0
>>453
やっぱりWindows版のruby.exeを使うのはやめたほうが良いっすね
2019/06/15(土) 18:03:41.92ID:VjZxllkS0
カッコ省略の問題がなんで型の問題になるんだ?別の問題だろう。
2019/06/15(土) 23:03:19.36ID:suvV29vR0
>>456
Rubyは第一級関数言語やで
Rubyはカッコを省略してメソッドを呼び出せるので関数オブジェクトの取り出し方がめんどくさいのは事実だけどね
だからかどうか知らんけど、Symbol#to_proc みたいなのもあるけど

まぁ、メソッドチェーンでできるんだから、パイプ演算子は要らんかなとは思う
462449 (ワッチョイ 9a2c-oZrO)
垢版 |
2019/06/15(土) 23:26:17.73ID:VnSVMhRs0
>>459
Windows10・WSL・Linux で、使っている人もいるみたい

普通に、Ruby Installer で、Windows に入れると、irb の日本語表示でバグる。
外人は、sjis を知らないから

漏れは、irb を使うために、WSL の方にも、Ruby を入れてるけど、
Windows で、VSCode で十分

ユーザー環境変数、RUBYOPT に、--encoding=UTF-8 を設定してる。
これを設定すると、irb が起動しなくなる!

Windows 版では、バグがあるかも知れないので、
Ruby の最新版を使わず、2.4, 2.5 を使う方がよい

>>461
Ruby は、第一級関数ではない。
処理をオブジェクトにするとややこしいから、第一級関数にしない方がよい
2019/06/15(土) 23:47:22.68ID:mKDC3u9y0
> Windows 版では、バグがあるかも知れないので、
Windows 版使わないほうがいいっすね〜
464デフォルトの名無しさん (ワッチョイ 3e7c-jEB4)
垢版 |
2019/06/16(日) 11:55:03.74ID:NdAq/MEw0
windows なら素直に python 使え
無理して ruby 使ってもロクなことにならない
2019/06/16(日) 12:01:22.73ID:0yrhG5qHM
長く使うものを作るならGoも良い選択
Windowsで問題なく動く
JavaやPythonもそうだけど、最終的にはWindowsでの開発と相性のいいものが選ばれるんだよ
2019/06/16(日) 13:03:24.87ID:cl8tkhE+0
Windowsを捨てるのが一番良い。
2019/06/16(日) 17:50:50.68ID:ALGkmXda0
windowsでbatやpowerscript代わりにRuby使ってる
それ以上のモノをwindowsで作りたいならおとなしくC#使うべき
468デフォルトの名無しさん (ワッチョイ 9a01-nQaC)
垢版 |
2019/06/16(日) 21:33:59.28ID:keFwsV830
Windowsでちょっとしたスクリプトを書くなら、AutoHotkeyがお手軽かつ強力だな。
2019/06/17(月) 00:16:36.52ID:aG6Vt+AG0
>>468
Hot Soup Processer もw
470デフォルトの名無しさん (ワッチョイ 1ab0-bbbA)
垢版 |
2019/06/18(火) 06:18:25.72ID:3nOE2mBA0
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/

142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
471デフォルトの名無しさん (ワッチョイ 9a2c-oZrO)
垢版 |
2019/06/18(火) 22:50:32.33ID:PmBejiWq0
雑誌、WEB+DB PRESS Vol.110 (2019/4/25) では、

RubyVM を作った、Cookpad の笹田耕一による、Ruby 実装系の新連載が始まった!
2019/06/21(金) 15:19:36.87ID:LkxS+Sdt0
Sorbetの型注釈の書き方最悪だな
matzの言うことなんか無視して、ドキュメントを含めた統一的な型注釈の書き方を決めるべきだったのに
2019/06/22(土) 11:20:25.22ID:xaZv7O+80

お前さんの考える最高の書き方は具体的にどういうモンなの
2019/06/22(土) 16:41:03.20ID:ICCmixle0
>>471
買いました!
2019/06/23(日) 19:01:19.76ID:WHM6Ibwm0
日本語のような全角を2
英語のようなのを1
で計算する
printf を使えますか?

perl などでは日本語と英語がまざると
端末に出力するときの整形を printf と %s にまかせられません ずれます

この言語 ruby は日本人が作ったので
なにか日本語まじりの英語も整形する手段、ライブラリがあるかもしれない
そう思って訪ねに来ました

ruby には
日本語も整形できる手段ありますか?
スマートなprintfの類ありますか?
2019/06/23(日) 19:10:36.01ID:xc930vdW0
ソースをUTF-8で記述
2019/06/23(日) 20:29:44.45ID:WHM6Ibwm0
ありがとうございました
日本語3文字を length が 6 と
2019/06/23(日) 20:30:03.52ID:WHM6Ibwm0
返してくれるので
これで楽に書けます
2019/06/23(日) 22:54:23.73ID:MSRPr+EY0
> 日本語3文字を length が 6 と
だめじゃんw
6を返すってことは6じゃない場合もあるってことだからな
2019/06/23(日) 23:29:15.95ID:kDz3gLp60
つうか、3文字で6ってなんやねん?
9ちゃううんか?
2019/06/24(月) 08:44:42.15ID:xbxTg/onM
lengthとbytesizeは違う
2019/06/24(月) 10:39:06.34ID:GG24ezzu0
いずれにしろ
日本語3文字が6と返ってくるのはおかしい
483デフォルトの名無しさん (ワッチョイ 4b7c-Kkfr)
垢版 |
2019/06/24(月) 12:29:01.33ID:NW8XqAfb0
API で横幅を取得
East Asian Width
http://www.unicode.org/reports/tr11/
https://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6%96%87%E5%AD%97%E5%B9%85
484デフォルトの名無しさん (スップ Sdca-rCja)
垢版 |
2019/07/01(月) 12:54:44.12ID:fiA0UtsUd
Pythonなんかだと
printとinputですが
Rubyでは
putsとgetsと三単現のsがつきますよね

命令文なので二人称のputとかgetにした方が良いと思うのですが…
何でRubyは基本的な英語の語法を無視しているのですか?
2019/07/01(月) 12:57:54.84ID:MoEwNeEzM
put stringの略だとよwww
to_sとかもそうだけどjap engrish思考よなwwww
486デフォルトの名無しさん (スップ Sdca-rCja)
垢版 |
2019/07/01(月) 12:59:27.33ID:fiA0UtsUd
>>485
いや、よく理解出来ました
考え方として賛成はしかねますが納得は出来てすっきりしました
ありがとうございましたm(_ _)m
2019/07/01(月) 13:00:37.00ID:ywGyCn2/0
printf が print format の略であるように、
puts が put string の略なのは
C言語由来ですよ?
488デフォルトの名無しさん (スップ Sdca-rCja)
垢版 |
2019/07/01(月) 13:06:28.54ID:fiA0UtsUd
>>487
いろいろありがとうございます
己の無知を反省します
489デフォルトの名無しさん (ワッチョイ 15e7-3lym)
垢版 |
2019/07/01(月) 17:05:10.98ID:2m4t7V760
>>485
またもやアンチRubyが無知を晒したか
C言語の標準ライブラリに関する知識も無しに批判するとは何とも恥さらしな


>>484
Ruby なんかだと可変(mutable)と不変(immutable)なメソッドは
たとえば sort! と sort ですが、
Python では sort と sorted と不変な操作には過去分詞の -ed がつきますよね

宣言や表明ではないし、ましてや過去の時系列とは無関係なので
可変を明示する sort! と sort にした方が良いと思うのですが…
何で Python は基本的な英語の語法を無視しているのですか?
490デフォルトの名無しさん (アウウィフ FF11-a57L)
垢版 |
2019/07/01(月) 17:05:17.93ID:87GWfzf4F
startswith や endswith には s ついてる
2019/07/01(月) 18:04:52.69ID:MoEwNeEzM
識別子に?や!使えるようにしてるもんだから他の言語は?.のところ&.なんだよなwww
ダッサwwwww
2019/07/01(月) 19:31:12.97ID:sgfBLVFM0
>>489
sort「!」なんかの時点で、もう英語は関係ないやろ!w
2019/07/02(火) 04:10:59.33ID:uMGeffjZ0
PowerShell -Part 3

744デフォルトの名無しさん2019/07/01(月) 14:41:57.11ID:YzHO/9WR
>>743
どうでもいい

745デフォルトの名無しさん2019/07/01(月) 16:21:19.60ID:MoEwNeEz
>>743
死ね

745は、色んなスレに「死ね」って書いてる荒らし。ID:MoEwNeEz。
荒らしは必ず、複数の書き込みをするので要注意!

Ruby 初心者スレッド Part 65

485デフォルトの名無しさん (アメ MM39-rSnO)2019/07/01(月) 12:57:54.84ID:MoEwNeEzM
put stringの略だとよwww
to_sとかもそうだけどjap engrish思考よなwwww

491デフォルトの名無しさん (アメ MM39-rSnO)2019/07/01(月) 18:04:52.69ID:MoEwNeEzM
識別子に?や!使えるようにしてるもんだから他の言語は?.のところ&.なんだよなwww
ダッサwwwww
2019/07/02(火) 08:05:59.97ID:b3K46sKz0
>>493
他人をどうこういう前に、お前の書き込み履歴と鏡を見直せ
495デフォルトの名無しさん (ワッチョイ a97c-a57L)
垢版 |
2019/07/02(火) 09:54:03.28ID:dJ0Zw08U0
493 は死んで良い
2019/07/03(水) 12:11:49.04ID:+RO4gFPu0
俺も493は死んでいいと思う
497デフォルトの名無しさん (ワッチョイ ff2c-NenP)
垢版 |
2019/07/10(水) 14:15:50.44ID:Jbt6AAsO0
redo は、現在のループをやり直すけど、
ループを最初の要素から、やり直すにはどう書く?

例えば、3 なら、また1 からループを始める

ary = [ 1, 2, 3, 4 ]

ary.each do |num|
p num if num == 3
end
498デフォルトの名無しさん (ワッチョイ 03e7-MLAK)
垢版 |
2019/07/10(水) 15:22:02.98ID:tfcMfkAP0
>>497
http://ideone.com/8UfEyv

もしもCPUの仕組みを知っていれば、制御変数 i は
プログラムカウンタのことだと見立てることができます
さらに抽象化して、もしもステートマシンを知っていれば:
・ブロック do .. end は状態遷移を表し、
・ブロック引数 i は遷移元状態であり、
・ブロックの評価値は遷移先状態であると
見立てることができます

なお、loop.inject というパターンは過去にも別スレで利用しました
 https://mevius.5ch.net/test/read.cgi/tech/1415419907/264
 > なおメソッド loop は一般に loop do .... end という手続き型のスタイルで
 > 書かれることが多いために ループ構文の一種と誤解されがちですが、
 > (lambda を構文糖であると >>254 が 勘違いしたように....)
 > loop はメソッドですので(コードで示したように) inject へ
 > チェーンさせることができます
2019/07/10(水) 16:16:11.40ID:Jbt6AAsO0
require 'prime'

p ary = Prime.prime_division( 18 )
#=> [[2, 1], [3, 2]]

18 を素因数分解した結果、

[[2, 1], [3, 2]]、2が1回, 3が2回みたいな表記を、
単純に、[2, 3, 3]のように開くには、どうすればよいですか?
2019/07/10(水) 16:39:54.23ID:Jbt6AAsO0
>>498
ありがとう

loop.inject か、トリッキー!
どちらも使い慣れないから、頭を使う!

each_with_index, each_with_object では、ダメなのか
501デフォルトの名無しさん (ワッチョイ 03e7-MLAK)
垢版 |
2019/07/10(水) 17:37:17.74ID:tfcMfkAP0
>>499
[[2, 1], [3, 2]].flat_map { |n, e| [n] * e }
#=> [2, 3, 3]
2019/07/10(水) 18:02:55.65ID:Jbt6AAsO0
>>501
ありがとう

flat_map は便利ですね
503デフォルトの名無しさん (ワッチョイ 3f2c-QKg6)
垢版 |
2019/07/20(土) 14:16:26.97ID:NKxgAyGK0
乱数はメルセンヌツイスタらしいけど、
偏るので、マシなやり方はないですか?

Array.new( 25 ) { rand( 1..9 ) }

出力
[3, 2, 4, 3, 6, 3, 1, 3, 7, 6, 1, 9, 3, 2, 5, 6, 6, 7, 5, 6, 3, 3, 8, 4, 9]
[5, 8, 4, 1, 3, 3, 2, 2, 9, 7, 9, 7, 7, 6, 7, 4, 3, 4, 5, 4, 8, 8, 7, 2, 5]
[7, 7, 6, 7, 9, 5, 8, 2, 8, 5, 1, 8, 4, 9, 3, 3, 9, 8, 6, 1, 1, 3, 5, 7, 2]
504デフォルトの名無しさん (エムゾネ FF5f-CMz4)
垢版 |
2019/07/20(土) 14:25:34.88ID:1y0e4GF6F
a=[3, 2, 4, 3, 6, 3, 1, 3, 7, 6, 1, 9, 3, 2, 5, 6, 6, 7, 5, 6, 3, 3, 8, 4, 9]
b=[5, 8, 4, 1, 3, 3, 2, 2, 9, 7, 9, 7, 7, 6, 7, 4, 3, 4, 5, 4, 8, 8, 7, 2, 5]
c=[7, 7, 6, 7, 9, 5, 8, 2, 8, 5, 1, 8, 4, 9, 3, 3, 9, 8, 6, 1, 1, 3, 5, 7, 2]

(a+b+c)/3
2019/07/20(土) 16:32:33.97ID:/lD6o5wQM
>>503
なぜ偏っていると思ったの?統計取った?
Rubyistは一般にあまりレベルが高くないとはいえ、Rubyのコミッタ陣は少なくとも今の君よりは知識も能力も経験も上だと思うよ
506デフォルトの名無しさん (ワッチョイ 7f2d-ShKg)
垢版 |
2019/07/20(土) 17:05:02.08ID:wkIhGLkm0
2人コミッター知ってるけど何の専門家でもなければまともな経歴でもないよ・・・・
507デフォルトの名無しさん (ワッチョイ 4f7c-CMz4)
垢版 |
2019/07/20(土) 17:08:41.13ID:ppdy8tl00
メルセンヌツイスターって初期化しなくて良いんだっけ
2019/07/20(土) 17:54:18.98ID:QHhW8HGw0
>>504
乱数で平均値を取ったら中央値に近づいて偏りが酷くなるだけじゃね
2019/07/20(土) 17:57:37.26ID:NKxgAyGK0
Kernel#rand の種は、現在時刻で初期化されるから、意識しないでもよい

統計を取れば、平均になるだろうけど、1回1回が偏る。
例えれば、

1回目 : 3,3,1,1,3,3,1,1
2回目 : 2,2,8,8,2,2,8,8
3回目 : 5,5,9,9,5,5,9,9

平均すると、まんべんなく出るのだろうが
2019/07/20(土) 18:02:25.41ID:NKxgAyGK0
例えば、503 で偏る部分は、

5, 6, 6, 7, 5, 6
9, 7, 9, 7, 7, 6, 7
7, 7, 6, 7
9, 3, 3, 9

何回やっても偏る
511デフォルトの名無しさん (ワッチョイ 4f7c-CMz4)
垢版 |
2019/07/20(土) 18:37:19.17ID:ppdy8tl00
おま環かどうか切り分けるために
codepad.org
とか
ideone.com
あたりで実行してみたら
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況