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

Ruby 初心者スレッド Part 30

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/08/08(土) 08:21:23
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
 なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0694デフォルトの名無しさん2009/09/06(日) 18:44:10
913 nobodyさん [sage] Date:2009/09/06(日) 14:23:30  ID:??? Be:
    >>905-907
    本当だ。なんだこれ?

    mswin32版のRuby 1.8.7-p160が遅すぎる件 - 那由多屋 開発日誌
    http://d.hatena.ne.jp/nayutaya/20090601/1243848756

    L'eclat des jours(2009-04-22)
    http://www.artonx.org/diary/20090422.html

    (コメ欄)
0695デフォルトの名無しさん2009/09/06(日) 19:00:23
>>691
このBlog書いてるの誰?
0696デフォルトの名無しさん2009/09/06(日) 19:11:53
>>691
批判とかツッコミはやめたほうがいいよ。スルー推奨。
過去の記事を読めばわかるけど、実は極度に打たれ弱い。
0697デフォルトの名無しさん2009/09/06(日) 19:24:49
> 実は極度に打たれ弱い。
叩き甲斐があるってもんじゃないか
0698デフォルトの名無しさん2009/09/06(日) 19:26:10
いや全然
オモチャが極端に少ない生活してるんだな
0699デフォルトの名無しさん2009/09/06(日) 19:26:43
>>697
> 叩き甲斐があるってもんじゃないか

叩き甲斐とは、叩かれ強い人を精神病院送りにした時感じるもの。
0700デフォルトの名無しさん2009/09/06(日) 20:06:46
>>696
本人乙
0701デフォルトの名無しさん2009/09/06(日) 20:12:45
うざい
0702デフォルトの名無しさん2009/09/06(日) 20:13:41
マジで本人乙
0703デフォルトの名無しさん2009/09/06(日) 20:45:32
うざい
0704デフォルトの名無しさん2009/09/06(日) 20:49:45

             ,.、   .,r.、
            ,! ヽ ,:'  ゙;.
            !  ゙, |   }
            ゙;  i_i  ,/
             ,r'     `ヽ、
|  ,.、  ,r.、    ,i" _,    ._   ゙;
| ,! ヽ,:'  ゙;.     !. ・     ・  ,!
| !   ,!  }     ヽ、 x    _,r''
|二゙;  i二二二(⌒ノ"''`''''''''''''"´`ヽ.
| ,r'      `ヽ、 ´ヾ、      l  l
,i"   _,   _ ゙;    !      i___|
!.  ・     ・,!   |       t,ノ
|ゝ_    x _::'    !、、、、、、、、、、!
|,/"`''''''''''''''"´';,     |   |    |
(,;!         !)       |   |   |
|゙''::r--、::--;r'        |____|_____|
|―゙'ー-‐゙ー-゙'―┐   (,,,__(,,,____)
07056972009/09/06(日) 20:54:13
>>699
うん、オモチャで遊ぶときは今のオモチャを壊してから次のオモチャで遊ぶもんでね
一つのオモチャで2回遊んだことないんだ。
0706デフォルトの名無しさん2009/09/06(日) 21:03:29
ほんとに基地外スレ・・・
0707デフォルトの名無しさん2009/09/06(日) 21:08:40
そんなにほめてくれなくても(赤面)
0708デフォルトの名無しさん2009/09/06(日) 21:17:00
なにそれこわい
0709デフォルトの名無しさん2009/09/06(日) 22:08:16
MoonGiftだっけ?
0710デフォルトの名無しさん2009/09/06(日) 23:38:46
Ruby上でPythonを走らせる実装にRuby/Pythonがありますが
逆にPython上でRubyを走らせる実装ってありますか?

BlenderでRubyを使いたいです・・・
0711デフォルトの名無しさん2009/09/06(日) 23:42:50
ruby-1.8.6-p383をgcc4.4.0のmingwでビルドする場合は、
ルートのMakefileのCFLAGから-O2を外してmakeすれば良いみたい。testとtest-all通った。

ruby-1.8.7-p174はtestは通ったがtest-allするとtestが全然始まらない。重いだけかな?
0712デフォルトの名無しさん2009/09/07(月) 00:09:02
>>709
MoonWolf
0713デフォルトの名無しさん2009/09/07(月) 02:25:13
確かな匂い
0714デフォルトの名無しさん2009/09/07(月) 07:32:47
次のエントリもひどいな。これは、もはや才能。
0715デフォルトの名無しさん2009/09/07(月) 08:58:22
本人のブログに突撃するのはかわいそうだからやめようね。
突っ込みたい人はここでどうぞ。好きなだけ突っ込んであげて。
0716デフォルトの名無しさん2009/09/07(月) 09:03:05
RubyのeachへProc渡し
p = Proc.new {|x|
  print(x)
  if (x == 2)
    return
  end
  print(', ')
}
0717デフォルトの名無しさん2009/09/07(月) 09:18:35
本人はココに常駐してるのかw
0718デフォルトの名無しさん2009/09/07(月) 09:34:31
もう触れるなよ
エントリ更新するたびに出てくるようになるぞ
0719デフォルトの名無しさん2009/09/07(月) 10:36:34
MoonwolfってRubyistだったと思ってたけど、いつの間にRubyぎらいになったんだ
0720デフォルトの名無しさん2009/09/07(月) 10:47:11
Headius: Introducing Surinx
http://blog.headius.com/2009/08/introducing-surinx.html


JRubyの人が新しい言語作るってよ。

Duby = Rubyの見た目+Javaの型システム+静的型、型推論
Surinx = Rubyの見た目+Javaの型システム+動的言語
0721デフォルトの名無しさん2009/09/07(月) 10:55:43
>>720
スレ違い
0722デフォルトの名無しさん2009/09/07(月) 10:57:09
dailsとか出てくるのかな
0723デフォルトの名無しさん2009/09/07(月) 10:59:43
anarchy golf - hello world
http://golf.shinh.org/p.rb?hello+world#Ruby

おいいいいい、RubyでHello worldが12バイトとかどうやんだよ。解説よろ
0724デフォルトの名無しさん2009/09/07(月) 12:17:18
>>722
juby on jails
0725デフォルトの名無しさん2009/09/07(月) 12:31:00
Hello world
0726デフォルトの名無しさん2009/09/07(月) 12:32:17
変なのが消えて、また過疎スレ化するのかな・・・
そういえば夏も終わりだねぇ
0727デフォルトの名無しさん2009/09/07(月) 13:14:56
実は自分がその「変なの」だったっていうオチって怖くね?
0728デフォルトの名無しさん2009/09/07(月) 13:30:20
何その林先生案件
0729デフォルトの名無しさん2009/09/07(月) 15:11:26
>>727
ありきたり過ぎてあくびが出る
0730デフォルトの名無しさん2009/09/07(月) 15:51:32
>>723
さっぱりわからん。頑張っても14Bしか出来んかった
0731デフォルトの名無しさん2009/09/07(月) 17:11:34
>>723
gorubyじゃないよね……?
0732デフォルトの名無しさん2009/09/07(月) 17:18:53
Hello world だけで 11 バイトだからなぁ。
PHP なら 11 バイト可能だけどw
0733デフォルトの名無しさん2009/09/07(月) 17:29:33
Hello, world!
お題がこれだから13byteでPHPでも無理
0734デフォルトの名無しさん2009/09/07(月) 17:30:34
「単純なやり方では」無理、だ
なにかしらの圧縮かけてんだろうけど・・・
0735デフォルトの名無しさん2009/09/07(月) 17:37:24
短縮系golfは初心者の得るものはないので他スレでやっとくれ
0736デフォルトの名無しさん2009/09/07(月) 17:45:07
>>731
gorubyはむしろhだけだった記憶がw
0737デフォルトの名無しさん2009/09/07(月) 18:17:40
exec禁止じゃないから、gorubyを呼び出してるんじゃないかと思うが。
0738デフォルトの名無しさん2009/09/07(月) 19:34:17
s = "aaaaaaaaa[hoge]piyopiyo"
r = "[hoge]piyo"

if s =~ /#{r}piyo/
 puts $&
end

今日こんな感じのコード書いてマッチしねえってことで
しばらくはまってた
0739デフォルトの名無しさん2009/09/07(月) 19:54:27
>>738
気持ちは分かるw

p /#{r}piyo/ #=> /[hoge]piyopiyo/
p /#{Regexp.escape r}piyo/ #=> /\[hoge\]piyopiyo/
0740デフォルトの名無しさん2009/09/07(月) 19:59:26
putsとかpとかprint以外のメソッドに括弧をつけない男の人って
0741デフォルトの名無しさん2009/09/07(月) 20:15:22
自作メソッドにしか付けねーよ
0742デフォルトの名無しさん2009/09/07(月) 20:44:24
括弧は出来るだけ付けるのがナウいんですか?
今までその逆をしてました・・・ごめんなさい
0743デフォルトの名無しさん2009/09/07(月) 21:33:39
カッコがない場合は「わざと」外してる
それは p だったり puts だったり DSL っぽく書く意図だったり
カッコの有無で動作が変わることを経験した人はカッコつけるのを基本にすると思う
0744デフォルトの名無しさん2009/09/07(月) 21:35:00
引数無しメソッドでもつけるのが最近のマイブーム
ああ、これ関数だなって一発でわかるし
0745デフォルトの名無しさん2009/09/07(月) 21:39:13
普段はまあどっちでも好きなようにしろ、が回答
紛らわしいときに ( ) が使われているのなら普段が ( ) ありでもなしでも構わない

問題は、普段からカッコつけない奴の多くは「紛らわしいとき」を全く意識しないということ
たまたま動いてるのを普通にスルーしやがる

普通逆だろ、カッコ常につけまくってる奴のほうがカッコの有無に無頓着であるべきだろ
0746デフォルトの名無しさん2009/09/07(月) 21:47:12
kimoi
0747デフォルトの名無しさん2009/09/07(月) 22:13:24
obj.method arg とか死ぬほどキモイな
0748デフォルトの名無しさん2009/09/07(月) 22:26:46
メソッドチェーンがない言語の因習だと思う
0749デフォルトの名無しさん2009/09/07(月) 22:56:44
Moonwolf説はガセ
0750デフォルトの名無しさん2009/09/07(月) 23:12:59
railsのソースコード読んでruby覚えた俺はカッコ無しの方がしっくりくる
メソッドの戻り値も変数に格納しない
0751デフォルトの名無しさん2009/09/08(火) 00:11:01
1.9.2で、mingw32の4.4.0のpthreadってdisableしてビルドした方が良いのかな?
0752デフォルトの名無しさん2009/09/08(火) 00:12:52
>>751
あ、1.9.1だった。スマン。
0753デフォルトの名無しさん2009/09/08(火) 05:40:43
>>751
よくはないが、別にそんなクリティカルな用途で使うわけでもないだろうし別にいいんじゃね
0754デフォルトの名無しさん2009/09/08(火) 07:59:59
Perlでいうところの関数のリファレンスを変数に格納して実行するにはどうすればいいのでしょうか?

--- Perl ---
sub func { print 'func' }

$func_ref = \&func;
$func_ref->();

--- Ruby ---
def method
print 'method'
end

method_ref = ????
method_ref.call??


こうするしかないのかな?

method_ref = proc { method }
method_ref.call
0755デフォルトの名無しさん2009/09/08(火) 08:24:37
>>754
Kernel#__send__(文字列 or シンボル, 引数...)
Method#call(引数...)
UnboundMethodをbindして#call(引数...)
など。
0756デフォルトの名無しさん2009/09/08(火) 08:40:35
>>754
Object#method # >>755の真ん中の奴

def func ; puts 'func' ; end
func_ref = method(:func)
func_ref.call
0757デフォルトの名無しさん2009/09/08(火) 09:07:43
>>755-756
サンクス
0758デフォルトの名無しさん2009/09/08(火) 09:33:53
>>751
--disable-pthreadでconfigureするかどうかってこと?
意味ないからどっちでも同じ結果になるよ。
0759デフォルトの名無しさん2009/09/08(火) 12:04:10
>>758
サンクス
そうするとstruct timespecが二重定義って怒られるのはどうしよう
0760デフォルトの名無しさん2009/09/08(火) 15:12:36
>>759
redmineで報告すればいいんじゃないかな。
0761デフォルトの名無しさん2009/09/09(水) 13:16:21
Rubygemパッケージを作るための色々なファイルの雛型あきこしてくれるライブラリとかありませんか
0762デフォルトの名無しさん2009/09/09(水) 13:41:05
トップレベレと言うのか、どこのクラスにも属さず、
いきなり書いた一行の文って、どう考えればいいの?

Cで言うmain関数みたいなのに暗黙のうちになってるとか、
Javaで言うmainメソッドみたいなのに暗黙のうちになってるとか、
・・・どう解釈したらいいのだ?
0763デフォルトの名無しさん2009/09/09(水) 13:51:50
>>761
$ jeweler --rspec hogeeee
    create .gitignore
    create Rakefile
    create LICENSE
    create README.rdoc
    create .document
    create lib
    create lib/hogeeee.rb
    create spec
    create spec/spec_helper.rb
    create spec/hogeeee_spec.rb
Jeweler has prepared your gem in hogeeee
$ ls hogeeee/
LICENSE README.rdoc Rakefile lib spec
0764デフォルトの名無しさん2009/09/09(水) 13:59:55
>>762
http://i.loveruby.net/ja/rhg/book/minimum.html
コンテキストとしてのself とか main とか
0765デフォルトの名無しさん2009/09/09(水) 14:01:25
>>762
トップレベルにも self として参照できるオブジェクトがある。
ほとんど単に Object.new したものだが、文字列化すると main
と返すようになっている点だけちょっと違う。
puts self
#=> main
p self
#=> main
puts self.class
#=> Object
0766デフォルトの名無しさん2009/09/09(水) 14:07:31
>>763
これ知ったとき、spec_helper をどっかの rubygem からコピペして
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
を全ファイルの先頭に自力で書いてた俺超涙目
0767デフォルトの名無しさん2009/09/09(水) 15:20:22
メソッド内部で print とかされて標準出力に表示されている結果を
rspec でチェックすることはできませんか?
0768デフォルトの名無しさん2009/09/09(水) 15:36:33
putsはObjectがincludeしているKernelのメソッド。

putsを呼ぶ時点のselfにspecからアクセスできるなら
ソレ.should_receive(:puts).with(出力)
などで可能だと思う。
0769デフォルトの名無しさん2009/09/09(水) 15:38:36
>>767
$stdout = StringIO.new
で溜め込むとか
0770デフォルトの名無しさん2009/09/09(水) 16:12:05
>>768
「メソッド内部」と断ってるし普通アクセスできないと思う
0771デフォルトの名無しさん2009/09/09(水) 16:43:30
>>770
class Greeter
def hello(name)
puts "hello, #{name}"
end
end

このような位置のputsはspecで
@greeter.should_receive(:puts).with('guest')
でテストできるけど、さらに奥深くだと無理だろうってことね。
0772デフォルトの名無しさん2009/09/09(水) 17:01:10
内部ってどのくらいなん、というのに依存するな

汎用的なのは$stdoutねじ曲げる>>769か
これ使ったことあるけど、なんかrspecで書いてる気がしないんだよな
stdout マッチャとか display マッチャとか作るべき
0773デフォルトの名無しさん2009/09/09(水) 17:18:54
そりゃまあ、らしく書くのに実装の隠蔽は欠かせない
0774デフォルトの名無しさん2009/09/09(水) 17:21:07
lambda{ @obj.greeting }.should display('hello!')

こんな感じ?
Proc オブジェクト使うのはこれはこれで微妙に不評なんだよね
0775デフォルトの名無しさん2009/09/09(水) 17:51:58
>>763
ジュエラーか。ジュエリストのほうがかっこいいな。
最近ご無沙汰なんだが、hoeとかnewgemはもう古いの?
0776デフォルトの名無しさん2009/09/09(水) 18:10:42
hoe がイヤ過ぎるから newgem や jeweler が出てきたのでは…
0777デフォルトの名無しさん2009/09/09(水) 18:55:17
hoeとかrubyforgeとかって基本的にgemを作るときに要るもので、
配布物を使う人には無用のものだと思っていたのだけど、
なんで依存しているgemがあるんだろう、という疑問。

07787772009/09/09(水) 18:59:06
自己レス。
作者がadd_development_dependencyを知らないだけなのかな。

0779デフォルトの名無しさん2009/09/09(水) 22:29:32
ある文字列をN文字ずつに分解するのはどうやりますか。
たとえば 'abcdef' を2文字ずつに分解して ["ab", "cd", "ef"] のようにします。
よろしくお願いします。

0780デフォルトの名無しさん2009/09/09(水) 22:37:38
N = 2
'abcdef'.scan(Regexp.new('.{%d}' % N))
0781デフォルトの名無しさん2009/09/09(水) 23:44:39
すごく初歩的な質問なのですが、Rubyのドキュメントはどこにあるのでしょうか?皆さんは何を参照していますか?
公式HPを見ましたが、Rubyの文法を簡単に説明しているだけで、標準ライブラリの細かい仕様を調べたい時などには役に立たないと感じました。
たとえばgemにインストールしたライブラリであればgem serverコマンドでRDocリファレンスが見れますが、標準ライブラリのRDocのようなものは無いのでしょうか?
バージョンは1.8でも1.9でも構いません。よろしくお願いします。
0782デフォルトの名無しさん2009/09/09(水) 23:55:43
>>781
http://www.ruby-lang.org/ja/documentation/
とそのリンク先は見た?
07837812009/09/10(木) 00:50:23
>>782
ありがとうございます。
そのドキュメントは見ましたが、文法の解説という感じなので自分が求めてるものと少し違いました。
言語が違いますがたとえばhttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/のように、
各クラスにどんなメソッドとフィールドがあって各メソッドの引数は何か、というのが一目で分かるようなAPI的なものを探しています。
0784デフォルトの名無しさん2009/09/10(木) 00:55:42
>>782の旧リファレンスマニュアルで十分な気がするんだが
ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFA5AFA5E9A5B9A1BFA5E2A5B8A5E5A1BCA5EBA1BFCEE3B3B0A5AFA5E9A5B9.html
ttp://www.ruby-lang.org/ja/man/html/_C5BAC9D5A5E9A5A4A5D6A5E9A5EA.html
0785デフォルトの名無しさん2009/09/10(木) 01:02:58
>文法の解説という感じ
何を言ってるんだおまえは
http://doc.okkez.net/static/187/library/_builtin.html
0786デフォルトの名無しさん2009/09/10(木) 01:05:47
www.ruby-doc.org/core でいいんじゃね?
0787デフォルトの名無しさん2009/09/10(木) 01:18:47
職場の頭の悪いJava厨が>>783と同じようなこと言ってたな
0788デフォルトの名無しさん2009/09/10(木) 02:03:14
Rubyって連結リストみたいなListのデータ構造はないのでしょうか?
配列とハッシュしかみあたらないのですが。。。
0789デフォルトの名無しさん2009/09/10(木) 02:05:35
>>781
体裁が gem の rdoc に一番近いのはここの Core API のところかなあ
http://www.ruby-doc.org/

書籍だと内容的にはちと古いがピッケル本のライブラリ編とか
0790デフォルトの名無しさん2009/09/10(木) 02:15:16
>>788
Arrayでおk
0791デフォルトの名無しさん2009/09/10(木) 02:30:57
>>788
連結リストを何に使うの?
キューやスタックなら配列で十分だぞ(#shift, #unshift, #push, #pop)

Lispの処理系を作るとかいう話なら自分で作るべき
0792デフォルトの名無しさん2009/09/10(木) 04:25:14
>>779
str.scan(/../n)
Nが毎回可変なら>>780
0793デフォルトの名無しさん2009/09/10(木) 06:01:01
>>779
5文字を2文字ずつとかしたとき余った文字って捨てていいの
0794デフォルトの名無しさん2009/09/10(木) 07:05:14
>>792
/../n の、n オプションって何?調べたけど見つからない

>>793
str.scan(/..?/)
Nが正の整数で可変なら、

r = '.' + ('.?' * (N-1))
str.scan(Regexp.new(r))

でいける?
うーん。正規表現よくわからん。
■ このスレッドは過去ログ倉庫に格納されています