トップページ⇒tech
1001コメント355KB

Ruby 初心者スレッド Part 52

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/06/06(木) 23:50:09.17
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 51
http://toro.2ch.net/test/read.cgi/tech/1358636526/

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
06566112013/10/08(火) 03:04:19.98
これで、>>635の文字列操作が使えれば万々歳なのだけど。
0657デフォルトの名無しさん2013/10/08(火) 03:06:02.34
上の方々の回答や提案無視して質問繰り返すのって、どうなんでしょう。
せめて調べたふりくらいはしましょうよ・・・
0658デフォルトの名無しさん2013/10/08(火) 03:18:12.18
ぬるぽ君とめりぽ君の月のお小遣いを比較して、2人のお小遣いの総計も出します。
2人とも貰えない月というのがあります。集計期間は両者一定であり、仮に12ヶ月とします。
ぬるぽ君のお小遣いのデータは
nulpo = [
 { 'month' => '1', 'money'=> 100 }
 { 'month' => '2', 'money'=> nil }
 { 'month' => '3', 'money'=> 100 }
 { 'month' => '4', 'money'=> nil }
 { 'month' => '5', 'money'=> 150 }
]
こんな感じのハッシュになっています。(厳密に言うと型はHashではなくてActiveRecordの戻り値ですが)
それを↓のような配列にしたいのです。
[
 ['1', 100, 200, 300]
 ['2',  0, 200, 200]
 ['3', 100,   0, 100]
 ['4',  0,  0,  0]
 ['5', 150,   0, 150]
]
  月 ヌルポ メリポ 計  ※最初の要素が月、次にぬるぽのお小遣い、めりぽのお小遣い、2人の合算が来るということです。

array = []
(1..12).each do |month|
 temp_array = []
 temp_array[0] = # 月を代入
 temp_array[1] = # ヌルポ君のお小遣いを代入
 temp_array[2] = # メリポ君のお小遣いを代入
 temp_array[3] = # 2人のお小遣いを合算して代入
 array << temp_array
end

・・・自分で書いたらこんなコードになりそうなのですが・・・・もう少し良いコードはございますでしょうか?
06596112013/10/08(火) 03:22:27.49
>>657
ぶっちゃけ、
回答や提案を言われてもよくわからないのです。
入門者なので具体的なプログラムを提示してくれないとわかりません。
0660デフォルトの名無しさん2013/10/08(火) 05:25:27.75
学習する意欲の無い人を初心者って呼ぶかなあ?
結果だけ欲しいなら元のスレで動きませんでしたって報告して
別の人に答えてもらえば良かったんだよ

require 'net/https'
(http=Net::HTTP.new('i.tipness.co.jp',443)).use_ssl=true
(1..3).each{|i|http.get("/pc/schedule/registration/?page=#{i}").body[/^<table class="table2[^>]+>(.*?)<\/table>/m,1].
scan(/^<td>.*$/).each{|td|print(td=='<td>'?"\n":td.gsub(/<\/?td>/,'')+"\t")};sleep 2}
0661デフォルトの名無しさん2013/10/08(火) 05:30:59.38
Javaスレの人、追い払い方上手ね
見習いたいもんだ
0662デフォルトの名無しさん2013/10/08(火) 07:53:27.77
>>658

def f(arr)
  arr.map { |hash|
  money = hash['money']

  [hash['month'], if money then money else 0 end]
}
end


f(nulpo).zip(f(melipo)).map { |(month1, money1), (month2, money2)|
  raise "month1: #{month1}, month2: #{month2}" if month1 != month2

  [month1, money1, money2, money1 + money2]
}
06636622013/10/08(火) 08:37:27.25
インデントがズレていたので再カキコ

def f(arr)
  arr.map { |hash|
    money = hash['money']

    [hash['month'], if money then money else 0 end]
  }
end


f(nulpo).zip(f(melipo)).map { |(month1, money1), (month2, money2)|
  raise "month1: #{month1}, month2: #{month2}" if month1 != month2

  [month1, money1, money2, money1 + money2]
}
0664デフォルトの名無しさん2013/10/08(火) 10:29:25.00
数列ごとに配列化するのはどういう定石があるのでしょうか?
例えば5列ごとなら[1,2,3,・・・・23]を
[1,2,3,4,5]
[6,7,8,9,10]
....
[16,17,18,19,20]
[21,22,23]にする感じで。

一応その目的は
a=[*1..23]
b=[]
while a[0] do
 b << a.shift(5)
end
p b
あたりで達成はできるのですが
0665デフォルトの名無しさん2013/10/08(火) 10:35:41.06
元の配列を操作するなんて論外でしょ
0666デフォルトの名無しさん2013/10/08(火) 10:36:26.70
Rubyの基本的なクラス、String、Array、Hash、の元になるEnumerable、あとIntegerあたりのメソッドは見ておくといい
暗記しなくていいから、どんな動作するメソッドがあるかだけでも見ておくといい
必要になったときに頭になんか引っかかるから
ttp://doc.ruby-lang.org/ja/1.9.2/class/Array.html

読みにくいけどな!
i
rb> (1..23).to_a.each_slice(5).each{|a| p a}
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[11, 12, 13, 14, 15]
[16, 17, 18, 19, 20]
[21, 22, 23]
0667デフォルトの名無しさん2013/10/08(火) 10:42:52.60
たぶん最初のto_aいらん
(1..23).each_slice(5).to_a
0668デフォルトの名無しさん2013/10/08(火) 10:51:47.12
>>665-667
なるほど
ご親切にありがとうございました。
0669デフォルトの名無しさん2013/10/08(火) 11:39:41.09
>>667
今回は「いる」と思う
配列なんとかしたいですという質問なのだから、配列という区切りは例示であったほうがいい
変にirbでワンライナーにするから意図がわかりにくいのだけども

arr = (1..23).to_a
arr.each_slice(5).each{|a| p a}

うむ完璧
0670デフォルトの名無しさん2013/10/08(火) 11:46:22.37
irbとかって2行3行にすると見難くなるんだよな
なるべく1行で書いて、残りは結果表示にしたい
06716112013/10/08(火) 17:40:43.46
>>660
ありがとうございます。
しかし、↓こんな感じで、エラーになります

C:\a>ruby t12.rb
C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_con
nect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verif
y failed (OpenSSL::SSL::SSLError)
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:918:in `bloc
k in connect'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/timeout.rb:52:in `timeou
t'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:918:in `conn
ect'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:862:in `do_s
tart'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:851:in `star
t'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:1367:in `req
uest'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:1126:in `get
'
from t12.rb:3:in `block in <main>'
from t12.rb:3:in `each'
from t12.rb:3:in `<main>'
0672デフォルトの名無しさん2013/10/08(火) 18:25:27.05
全く成長していない・・・
さすがにもうスレ違いなんじゃないですかね

冗談抜きで、手動でやった方が早いまである
0673デフォルトの名無しさん2013/10/08(火) 19:27:46.52
>>662-663
ありがとうございました!
0674デフォルトの名無しさん2013/10/08(火) 19:28:50.51
>>671
エラーメッセージでググれ
0675デフォルトの名無しさん2013/10/08(火) 19:43:22.16
1.8から2.0にしたら日本語コード系の問題多くて嫌になった。
ソースコードの日本語コードがどーたらあーたらとめんどくせえ。
どっかにすっきり分かる解説ってないの?
0676デフォルトの名無しさん2013/10/08(火) 20:51:08.34
ふと思ったんですが、みなさんはある変数がnilでないことを判定する際に

if variable

と、

unless variable.nil?

とでは、どちらを使っていますか?

自分のコードを見直した時にまざっていて気持ち悪かったもので…
0677デフォルトの名無しさん2013/10/08(火) 20:57:22.61
場合に応じて読みやすい方だけど、
unless else が繋がる場合は、分かりづらいので、
真偽か処理内容を逆にして if else にしたり。
06786762013/10/08(火) 21:13:52.17
>unless else が繋がる場合は、分かりづらい
なるほど。たしかに、これは自分も感じます。

また「if variable」でtrueが返るのは、
variableがnilでない時とfalseでない時になるので、
厳密にnilでないことだけを判定したい場合や、
nilでない!というニュアンスを強めたい場合に
「unless variable.nil?」と書こうかなと考えました。

ありがとうございました。
0679デフォルトの名無しさん2013/10/08(火) 21:52:06.93
ふと思ったんですが、みなさんはある変数がnilでないことを判定する際に

if variable

と、

unless variable.nil?

とでは、どちらを使っていますか?

自分のコードを見直した時にまざっていて気持ち悪かったもので…
0680デフォルトの名無しさん2013/10/08(火) 21:53:18.21
誤ってリロードして再投稿してしまいました。すみません…
0681デフォルトの名無しさん2013/10/09(水) 01:33:44.51
>>675
各自でつくります
0682デフォルトの名無しさん2013/10/09(水) 01:46:31.53
Windows上でRubyの1.9をインストールしてnokogiriを使ってます。
ちょっと実験ということで人気のDMMで女優名を取得しようとしてるんですが、
どうにも取得できない名前があります。

具体的には
http://www.dmm.co.jp/digital/videoa/-/actress/=/keyword=ta/
の田村真樹やら田村まほなど。

doc.xpath("//div[@class='act-box']").inner_text
こんな感じに書いて一応は一覧は取得できるんですが、
どういうわけか歯抜けになります。

どう見ても同じ構造に見えるんですが、何か見落としがあるんでしょうか?
0683デフォルトの名無しさん2013/10/09(水) 01:52:15.36
あ、すいませんURLコピペしてて間違いに気が付きました。
違うURLで試してました…orz

こんなアホなミスで何時間も格闘してしまったw
スレ汚し失礼しました。
0684デフォルトの名無しさん2013/10/09(水) 10:25:07.47
>>676
俺はCやC++経験が長いせいか、制御なんかはifで分ける方が好きだなあ。
Rubyって.でどんどん繋げて一行で実現しようとする傾向あるでしょ。

それやりすぎると、パズル的な読解が必要になって面倒になってくるんだよね。
一行当たりの情報量の粒度、インデントとかの「パターン」として見た目で
制御がわかるような書き方の方が、結局あとからメンテしやすいのではないかと。

完結だから、とか日本語と語順が同じだから、とかで1行連続型を勧める
人が多いのは俺にはあわん。
0685デフォルトの名無しさん2013/10/09(水) 10:31:47.36
ふと思ったんですが、みなさんはある変数がnilでないことを判定する際に

if variable

と、

unless variable.nil?

とでは、どちらを使っていますか?

自分のコードを見直した時にまざっていて気持ち悪かったもので…
0686デフォルトの名無しさん2013/10/09(水) 11:53:51.12
unless variable==nil
0687デフォルトの名無しさん2013/10/09(水) 12:06:46.67
unless version>1.9
0688デフォルトの名無しさん2013/10/09(水) 18:07:56.64
if variable != nil
0689デフォルトの名無しさん2013/10/09(水) 18:23:12.82
>>675
るびまの記事が参考になるかも。

Ruby M17N の設計と実装
magazine.rubyist.net/?0025-Ruby19_m17n

Ruby 2.0.0 の注意点やその他の新機能
magazine.rubyist.net/?0041-200Special-note#l2

クックパッドを Ruby 2.0.0 に対応させた話 - 文字エンコーディング関係
magazine.rubyist.net/?0042-MigratingARailsApplicationToRuby200#l21
0690デフォルトの名無しさん2013/10/09(水) 18:28:19.09
PerlとPythonじゃなくてなぜRubyを選んだのですか?
0691デフォルトの名無しさん2013/10/09(水) 18:34:20.30
逆に、なぜPythonなのかとききたい。Pythonのかきかた(インデント)がイヤなら、Rubyだ
0692デフォルトの名無しさん2013/10/09(水) 18:35:56.17
Perl -> Python と使ってきて、Ruby にも興味があったからです
並行して、C# や Haskell も習得中です
0693デフォルトの名無しさん2013/10/09(水) 18:43:18.48
先に触ったのがRubyだったし
インデントは別にいいけどselfが嫌だし
1行に詰め込みたい症候群だからなあ

まあPythonも内包表記は好きだけどな、特にfor2つの時の挙動
0694デフォルトの名無しさん2013/10/09(水) 19:28:08.30
先に触ったのはRubyだったけど
Pythonに乗り換えた
一番の理由はRubyはGUIのフレームワークがどれも糞だった
0695デフォルトの名無しさん2013/10/09(水) 19:40:20.49
RubyのGUIは「Rubyでやること」が目的だからな
「GUIでなにかやること」が目的なら他の言語でやればいい
0696デフォルトの名無しさん2013/10/09(水) 19:41:28.72
なるほどPythonやってくる
0697デフォルトの名無しさん2013/10/09(水) 19:44:37.04
webkitが使えるライブラリがあればなあ
0698デフォルトの名無しさん2013/10/09(水) 20:20:19.85
GUIいう人はどうせWindowsだろうからwin32使えばいいんじゃないの
びじゅあるなんたらとか
0699デフォルトの名無しさん2013/10/09(水) 21:55:40.29
rubyはjrubyとrawrがいいらしいよ
0700デフォルトの名無しさん2013/10/09(水) 22:19:55.68
日本語まわりの実装ってPythonもRubyも大差ないの?
日本生まれだからRubyの方が出来がいい、とかない?
0701デフォルトの名無しさん2013/10/09(水) 22:25:19.96
他のLLは標準コーディングスタイルがありますが
Rubyにはないんですか?
もしないなら松本先生に作ってもらいたい
0702デフォルトの名無しさん2013/10/09(水) 22:31:49.52
>>700
EUC/SJISが主流の時代には日本発のRubyのほうが出来がよかったけど(過去形)、
どのプラットフォームでもUTF-8が普通に使える今の時代では大差無し
残念なことに、現行の1.9ではマジックコメントやら添付ライブラリといった変更で
日本語処理周りに不要な混乱を起こしたことで、逆に弱点となった....と思う

個人的にはRubyの進化(1.6から2.0)の流れを好意的に見ているが、
1.9の日本語対応だけは大失敗だったと見ている
まあ、あと数年もすれば2.x系が主流になるから、それほど気にはしていないが....
0703デフォルトの名無しさん2013/10/09(水) 22:32:02.85
インデントはスペース2つとか?
0704デフォルトの名無しさん2013/10/09(水) 22:46:50.22
1.9.1飛ばしていきなり2.0になってればまた違ったんだろうけど、たらればの話になっちゃうな
1.9.0と1.9.1があったからこそなんとかなった面も多いわけで
0705デフォルトの名無しさん2013/10/09(水) 22:50:36.75
>>702
>1.9の日本語対応だけは大失敗だったと見ている

エラー→Webで調べておまじない、みたいなのが多くて疲れた。
日本語でてこない、コメントでしか使ってないようなログ解析のスクリプトが
突然エラーとかで疲れた。
いろいろ嫌な思い出。
もうちょっとなんとかならなかったのかね?
0706デフォルトの名無しさん2013/10/09(水) 22:52:59.85
>>701
こういう企画なら昔やってた、今でも多少は参考になるだろう
http://magazine.rubyist.net/?0010-CodeReview
0707デフォルトの名無しさん2013/10/10(木) 10:10:00.73
>>703
3こ
0708デフォルトの名無しさん2013/10/10(木) 12:21:40.57
>>690
入門で出てくるプッツとゲッツがコンビ芸名みたいで可愛かったから
0709デフォルトの名無しさん2013/10/10(木) 14:58:50.64
windowsでpythonのvirtualenvで仮想環境を作ってgemを別々に管理する方法を教えてください
0710デフォルトの名無しさん2013/10/10(木) 14:59:23.99
なぜしたいかというと今gem listってしたら大量のパッケージがあふれかえってて訳がわからなくなりました
0711デフォルトの名無しさん2013/10/10(木) 17:30:39.88
とにかくRubyのソースコードをダウンロードしたくないので
Web上でp 100のpに関する実装を見たいのでURLください
0712デフォルトの名無しさん2013/10/10(木) 17:48:42.41
rb_f_p
https://github.com/ruby/ruby/blob/trunk/io.c
https://raw.github.com/ruby/ruby/trunk/io.c
07137092013/10/11(金) 09:31:22.39
やっぱりないんですね・・・
0714デフォルトの名無しさん2013/10/11(金) 17:04:55.24
rubyもsqlite3ぐらいは標準ライブラリに入れてもいいと思うんですが
0715デフォルトの名無しさん2013/10/11(金) 17:06:43.88
pythonスレ見ましたねわかります
0716デフォルトの名無しさん2013/10/11(金) 21:13:05.96
例外処理とやらを実装してみたらえらくロバストなプログラムになって感動したぞ
0717デフォルトの名無しさん2013/10/11(金) 22:03:31.96
2013年10月のPYPL PopularitY of Programming Language indexが
公開された。PYPLはGoogle検索エンジンにおいてプログラミング
言語のチュートリアルが検索された回数から、対象となるプログラ
ミング言語がどれだけ話題になっているかをインデックス化したもの。
1   Java       26.8%
2   PHP        13.2%
3   Python      9.8%
4   C#         9.5%
5   C++        9.1%
6   C          8.4%
7   Objective-C   8.1%
8   Javascript    7.6%
9   Visual Basic   3.1%
10   Ruby       2.6% ←がんばれ
0718デフォルトの名無しさん2013/10/11(金) 22:54:27.70
やっぱり一行野郎として使うにはPerlのような魔機能で負けているんですかね?
0719デフォルトの名無しさん2013/10/11(金) 23:03:59.71
Rubyが流行らないのは仕様などの議論が英語ではなく日本語メインだから
日本では流行っても海外では相手にされない
0720デフォルトの名無しさん2013/10/12(土) 00:50:20.84
Top10に入ってるのに流行ってないとかアホらしい
これだけがんばれれば十分
0721デフォルトの名無しさん2013/10/12(土) 01:14:46.64
TIOBEとかこの手の調査とか本当にどうでもいい。検索エンジンソースだし
0722デフォルトの名無しさん2013/10/12(土) 01:16:31.72
>>717
意外とpythonって健闘しとるんやね。
0723デフォルトの名無しさん2013/10/12(土) 01:49:06.79
この調査だと毎年下がってるね
0724デフォルトの名無しさん2013/10/12(土) 02:51:20.18
サイト名が pyDatalog ってまったくもう
07256112013/10/12(土) 03:05:34.48
Rubyは日本でがんばるしかないのに、
君たちが入門者を冷たくあしらうから、先細りなんだよw
俺もpythonに行っちゃったしw
07266112013/10/12(土) 03:20:01.33
そもそも、Rubyとpythonが統合すればいいんじゃないの?w
ほぼ、同じような感じするんだけどw
07276112013/10/12(土) 03:21:14.68
ちなみに、PHPはコマンドプロンプトでは動かせないんですよね?
0728デフォルトの名無しさん2013/10/12(土) 04:16:16.32
うごく
07296112013/10/12(土) 05:17:23.36
>>728
ああ、そうですか。
つまり、パソコンの能力が上がってきたから、何でも出来るって感じなんですかね?

ひょっとして、Cもコンパイルなしで、
コマンドプロンプトで動かせたりして?
0730デフォルトの名無しさん2013/10/12(土) 05:58:50.26
2枚の画像入力してどのくらい似ているかを0〜100で返してくれるライブラリ無いですか
0731デフォルトの名無しさん2013/10/12(土) 08:31:43.87
>>729
C++インタプリタも存在してるね
まあスレチだし自分で調べるかC関連のスレで聞いてくれ
0732デフォルトの名無しさん2013/10/12(土) 11:11:36.89
>>730

image similarity ruby でぐぐったら similie という gem があったけど、
これはハミング距離だから出力範囲がアレだな。
0733デフォルトの名無しさん2013/10/12(土) 11:12:44.91
>>729

cint でぐぐれ
0734デフォルトの名無しさん2013/10/12(土) 15:30:56.38
>>725
おれもそうおもう
0735デフォルトの名無しさん2013/10/12(土) 16:17:10.34
>>725
おれもそうおもう
0736デフォルトの名無しさん2013/10/12(土) 16:47:15.73
>>725
おれもそうおもう
0737デフォルトの名無しさん2013/10/12(土) 16:53:24.79
おれはそうは思いますん。
0738デフォルトの名無しさん2013/10/12(土) 17:07:09.86
英語ができないクズのせいでRubyが良くならない
0739デフォルトの名無しさん2013/10/12(土) 17:44:30.68
ホントにPythonマニアってのは、
Rubyが気になって気になってしかたないんだねえ....
0740デフォルトの名無しさん2013/10/12(土) 18:09:38.81
おれもそうおもう
0741デフォルトの名無しさん2013/10/12(土) 18:16:42.63
マイノリティの大半はそんな物だ。
0742デフォルトの名無しさん2013/10/12(土) 18:18:14.63
githubにあるrubyのソースコードにプルリクエスト送るときってさ
ブランチ名はなににしたらいいのかおしえて
バグをみつけたけどこのへんのルールがわからん
0743デフォルトの名無しさん2013/10/12(土) 19:19:48.36
fix-hoge とかが無難かな
0744デフォルトの名無しさん2013/10/12(土) 20:09:22.34
王様のブランチ
0745デフォルトの名無しさん2013/10/12(土) 21:02:02.07
Rubyで簡単にWindows向けのGUIアプリ作れたらいいのになあ
0746デフォルトの名無しさん2013/10/12(土) 21:16:41.09
なんかそういうフレームワークなかったっけ?
あとiOSやAndroidのアプリが簡単にできるフレームワークっていいのある?
0747デフォルトの名無しさん2013/10/12(土) 22:02:06.40
Windows では、Microsoft が作る開発環境が他を駆逐するんだよ。
0748デフォルトの名無しさん2013/10/13(日) 02:57:01.33
Windows向けのGUIって条件ならVisualStudioは便利や
0749デフォルトの名無しさん2013/10/13(日) 16:40:19.39
プログラミングRubyとプログラミング言語Ruby
どっちの本が好きですか
0750デフォルトの名無しさん2013/10/13(日) 16:45:39.53
ヴェルタースオリジナル
0751デフォルトの名無しさん2013/10/13(日) 16:48:05.82
公式サイトに物申したいんだけど
ロケールで自動的に日本語サイトに飛ばしたり英語サイトに飛ばすのやめてもらいたい
そんなのサーバ側で勝手にやるのはおせっかい
俺は英語でみたいんだよ
0752デフォルトの名無しさん2013/10/13(日) 17:10:03.68
>>751
それは公式サイトの管理者へ(メール等で)直接要望を伝えるか、
または公式メーリングリスト(ruby-talk)で物申せばいいのではないかと....
ここ(=2ch)でグダグダと文句を言うだけでは何も始まらないよ
0753デフォルトの名無しさん2013/10/13(日) 17:14:50.04
なぜここで書いたか?
だって俺はRubyはメインで使ってないから
0754デフォルトの名無しさん2013/10/13(日) 17:18:24.97
メインで使ってなかろうがそういうことは本人に言うんだよ社会常識の問題だわ
0755デフォルトの名無しさん2013/10/13(日) 17:24:34.16
メインで使ってるかどうかって関係なさすぎる

要するに愚痴を聞いてもらいたかっただけなんだろ
07567942013/10/13(日) 17:40:58.21
ここ初心者スレだよね?
書店に行くから参考にしたいと思って聞いたのに誰も答えてくれないし
後の書き込みへの罵りばっかりってここけっこう民度ひどくないかな
■ このスレッドは過去ログ倉庫に格納されています