プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
探検
Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
2017/08/25(金) 16:05:20.69ID:0nrK3Ckt
大規模障害記念
2017/08/25(金) 16:05:48.85ID:HsL9LVKJ
たのしいRuby 第5版、2016
Effective Ruby、2015
メタプログラミング Ruby 第2版、2015
Rubyのしくみ、2014
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
リファクタリング:Rubyエディション、2010
Effective Ruby、2015
メタプログラミング Ruby 第2版、2015
Rubyのしくみ、2014
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
リファクタリング:Rubyエディション、2010
2017/08/25(金) 16:10:23.56ID:HsL9LVKJ
ギリセーフで間に合った
2017/08/25(金) 16:11:37.65ID:sLUvaIRs
6デフォルトの名無しさん
2017/08/25(金) 16:12:33.08ID:BwHFndLq each_with_object
なんて初めて見た。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) }
p b # => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
なんて初めて見た。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) }
p b # => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
7デフォルトの名無しさん
2017/08/25(金) 16:18:41.59ID:BwHFndLq evens = (1..10).each_with_object([]) {|i, a| a << i*2 }
# => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
each_with_objectってのは引数一個(空の配列)とブロックを取るみたい。
ブロックには、引数が2つ渡り、最初は、列挙される要素、2番目は引数(空の配列)が渡るらしい。
ブロックの戻値がeach_with_objectの戻値かな?
# => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
each_with_objectってのは引数一個(空の配列)とブロックを取るみたい。
ブロックには、引数が2つ渡り、最初は、列挙される要素、2番目は引数(空の配列)が渡るらしい。
ブロックの戻値がeach_with_objectの戻値かな?
8デフォルトの名無しさん
2017/08/25(金) 16:25:39.04ID:BwHFndLq a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
p a
a.each{|(x, y)| puts "x = " + x.to_s + "y = " + y.to_s}
このtupleみたいな(x, y)ってのは何だ?
Rubyにtupleがあるのか?
p a
a.each{|(x, y)| puts "x = " + x.to_s + "y = " + y.to_s}
このtupleみたいな(x, y)ってのは何だ?
Rubyにtupleがあるのか?
2017/08/25(金) 16:26:35.62ID:4MOWRfGQ
ブロック中での最後の評価値、じゃないのがこれの使い易いところ
戻り値には、each_with_object(ここのオブジェクト)を返す
injectでやろうとして
b = a.inject([[],[]]) {|acc, (x, y)| acc[0] << x; acc[1] << (y || x); acc}
ブロックの最後でこうやってaccを返そうとして頑張っちゃうような時には考えたい
戻り値には、each_with_object(ここのオブジェクト)を返す
injectでやろうとして
b = a.inject([[],[]]) {|acc, (x, y)| acc[0] << x; acc[1] << (y || x); acc}
ブロックの最後でこうやってaccを返そうとして頑張っちゃうような時には考えたい
10デフォルトの名無しさん
2017/08/25(金) 16:30:33.90ID:BwHFndLq よく判らんが、要素2個の配列をブロックの引数で(x, y)って受け取れば、
2個の要素はx,yとして受け取れるらしい。
2個の要素はx,yとして受け取れるらしい。
11前スレ996
2017/08/25(金) 16:55:24.12ID:sLUvaIRs aの配列の個数が変わる場合があるので、とりあえず以下のようにしてみたのですがrslt1とrslt2で結果が異なるのは何故ですか?
tobj==[[],[]]はtrueと出ます。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
tobj==[[],[]]はtrueと出ます。
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
12前スレ996
2017/08/25(金) 17:00:35.79ID:sLUvaIRs すみません。上のは不要なセミコロンが入っていました。(動作は問題ないみたいですが)
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
p rslt1,rslt2
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
tobj=[[]]*2
rslt1 = a.each_with_object([[],[]]) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
rslt2 = a.each_with_object(tobj) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
p rslt1,rslt2
2017/08/25(金) 17:06:01.66ID:W3qddKKH
Rubyの初め方
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン
↓
リファクタリングRubyエディション
Rubyのしくみ。
ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン
↓
リファクタリングRubyエディション
Rubyのしくみ。
ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン
14デフォルトの名無しさん
2017/08/25(金) 17:51:40.95ID:HsL9LVKJ リファクタリングRubyエディション
Rubyのしくみ
このふたつは必読
Rubyのしくみ
このふたつは必読
2017/08/25(金) 18:32:17.61ID:w/d6Mddl
>>前スレ989
それ継承でなくて上書きがダメって言ってるだけじゃん
Objectクラス継承しちゃうんだからもうオブジェクト指向言語使うのやめなよ
それ継承でなくて上書きがダメって言ってるだけじゃん
Objectクラス継承しちゃうんだからもうオブジェクト指向言語使うのやめなよ
2017/08/25(金) 18:48:50.81ID:W3qddKKH
>>13
最初からwebアプリ(Rails)を作りたい人は
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
パーフェクトRubyonRails
達人に学ぶ SQL徹底指南書
達人に学ぶ DB設計徹底指南書
SQLアンチパターン
テスト駆動開発をやりたい人は
Railsチュートリアル
はじめて学ぶソフトウェアテスト技法
Everyday Rails - RSpecによるRailsテスト入門
最初からwebアプリ(Rails)を作りたい人は
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
パーフェクトRubyonRails
達人に学ぶ SQL徹底指南書
達人に学ぶ DB設計徹底指南書
SQLアンチパターン
テスト駆動開発をやりたい人は
Railsチュートリアル
はじめて学ぶソフトウェアテスト技法
Everyday Rails - RSpecによるRailsテスト入門
2017/08/25(金) 19:18:38.80ID:3NyVHrhs
>>12
そりゃあんた2次元配列の初期化の基本でしょ。
tobj[0].object_id == tobj[1].object_id なんだから。
tobj = Array.new(2).map([]) とでもしないと。
そりゃあんた2次元配列の初期化の基本でしょ。
tobj[0].object_id == tobj[1].object_id なんだから。
tobj = Array.new(2).map([]) とでもしないと。
2017/08/25(金) 19:25:54.88ID:3NyVHrhs
2017/08/25(金) 19:27:54.09ID:UfR6nGBm
Rubyに多次元配列は存在しない
とかいう例のアレにも通じるアレだな
Array#*は単純にレシーバを引数回繰り返した結果を返す(値は複製しない)
複製しないってことは同じ配列がいくつも繰り返されるだけだ
つまり [[]]*2 と [[],[]] は違う
とかいう例のアレにも通じるアレだな
Array#*は単純にレシーバを引数回繰り返した結果を返す(値は複製しない)
複製しないってことは同じ配列がいくつも繰り返されるだけだ
つまり [[]]*2 と [[],[]] は違う
2017/08/25(金) 20:37:35.28ID:rKeka8MH
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
a.map {|e| [[e].flatten[0], [e].flatten[-1]] }.transpose
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
a.map {|e| [[e].flatten[0], [e].flatten[-1]] }.transpose
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
21デフォルトの名無しさん
2017/08/25(金) 21:01:41.73ID:rKeka8MH [a.map {|(e)| e }, a.map {|(*,e)| e }]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
2017/08/25(金) 21:09:45.04ID:rKeka8MH
[a.map {|(e,*)| e }, a.map {|(*,e)| e }]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
こっちのほうがきれい >>21は撤回で
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
こっちのほうがきれい >>21は撤回で
2017/08/25(金) 21:31:15.78ID:SZeQgZta
カッコ要らないよ
[a.map {|e,*| e }, a.map {|*,e| e }]
[a.map {|e,*| e }, a.map {|*,e| e }]
2017/08/25(金) 21:58:40.29ID:rKeka8MH
>>23
恐縮です
恐縮です
2017/08/25(金) 22:46:54.39ID:teISJdbp
>>10
メソッドやブロックの引数の受け取り方は多重代入と似た挙動になってるから
入れ子になった配列も展開して変数に受け取ることもできる
def test(a, (b, (c, d)))
……
end
test 1, [2, [3, 4]]
メソッドやブロックの引数の受け取り方は多重代入と似た挙動になってるから
入れ子になった配列も展開して変数に受け取ることもできる
def test(a, (b, (c, d)))
……
end
test 1, [2, [3, 4]]
2017/08/25(金) 22:56:33.15ID:UfR6nGBm
コードゴルフ(もどき)はあまり好ましいことではないように思える
初心者スレであるから特に
splat*を書いてしまったら立ち止まるべきかと
初心者スレであるから特に
splat*を書いてしまったら立ち止まるべきかと
2017/08/26(土) 00:10:52.42ID:azDqTcfP
>>10
Destructuringだね
多重代入は括弧により、ネストした配列の要素を代入することもできます。
https://docs.ruby-lang.org/ja/2.4.0/doc/spec=2foperator.html#multiassign
http://tony.pitluga.com/2011/08/08/destructuring-with-ruby.html
Destructuringだね
多重代入は括弧により、ネストした配列の要素を代入することもできます。
https://docs.ruby-lang.org/ja/2.4.0/doc/spec=2foperator.html#multiassign
http://tony.pitluga.com/2011/08/08/destructuring-with-ruby.html
2017/08/26(土) 00:16:16.83ID:Q9D9720h
うむ
尤もだ
尤もだ
29デフォルトの名無しさん
2017/08/26(土) 00:18:15.51ID:6TCzEPsc >>26
好ましくないが、楽しいので初心者向き。
好ましくないが、楽しいので初心者向き。
30デフォルトの名無しさん
2017/08/26(土) 00:23:16.07ID:6TCzEPsc2017/08/26(土) 00:30:44.39ID:Q9D9720h
>>27
上のリンク先の多重代入の説明間違ってるな
上のリンク先の多重代入の説明間違ってるな
2017/08/26(土) 00:31:33.66ID:GUwpgiyr
カンマで区切る代入はRubyの魔境のひとつなので半端に深入りするのも半端に慣れるのも事故のもとだからやめといたほうがいいかも
33デフォルトの名無しさん
2017/08/26(土) 01:28:41.95ID:8HsFh7FA 多重代入でもハッシュが使えればなーって思うことがたまにある
(x:, y: 1, z: 1.5) = { x: -1 }
(x:, y: 1, z: 1.5) = { x: -1 }
2017/08/26(土) 01:33:58.36ID:N4fvc+FV
式の評価の順番がわけわかめになるのでやめちくり><
2017/08/26(土) 01:44:30.12ID:azDqTcfP
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「インバウンド政策上、中国は重要」、訪日自粛で金子国交相「早く通常の状況に戻っていただきたい」 [ぐれ★]
- 今後50年間、毎年100万人ずつ人口が減る…「少子化対策」の失敗で日本が迎える「死ぬまで搾取」というヤバい未来 ★5 [ぐれ★]
- 《「最近いつした?」が口癖》国分太一 女性への“わいせつ事案”報道…目撃されていた「下ネタ好き」と「悪辣なイジり癖」 [Ailuropoda melanoleuca★]
- 【東京】「店で客に出した」豊洲市場でマグロの「カマ」など30キロ時価210円相当を窃盗か…中国籍の女(66)逮捕 マグロのカマ焼き600円 [ぐれ★]
- 中国外務省「正式な発言撤回なければ受け入れず」 高市首相は台湾有事「存立危機事態」言及せずも「言及しないことと撤回は別問題」★5 [ぐれ★]
- スリランカ人男性の強制送還「中止を」 野党議員らが入管庁に要請 [♪♪♪★]
- 例のアンミカさんが船で密入国したというデマ、裁判でデマ認定される。デマを流したネトウヨはごめんなさいしないといけないよね [931948549]
- 【動画】上海バンダイナムコフェス、ワンピース歌ってる途中に中国政府「日本人の公演全面禁止」発令された瞬間強制終了 怖すぎ★2 [579392623]
- 【んな🏡】金曜✨夜も~オールナイトんなっしょい❗🏰【姫森ルーナ】
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ171
- 上司「高市さんは中国に言うべきこと言うから良かったけどな?」ぼく「そ、そうなんですねぇ」👈こういうのコメント困るよな [369521721]
- 高市、習近平との会談でウイグル問題や香港問題にまでクビを突っ込んでいた [329271814]
