トップページ⇒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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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))

でいける?
うーん。正規表現よくわからん。
0795デフォルトの名無しさん2009/09/10(木) 07:05:58
どうなんだろうね
端数出ないと仮定してもよさそうだが

require 'enumerator'
"12345".split(//n).each_slice(2).to_a.map{|a| a.join}

["12", "34", "5"]
0796デフォルトの名無しさん2009/09/10(木) 07:22:47
>>794
> Ruby は日本語化されているので、$KCODE の値に従って正規表現中の日本語文字を正しく扱います。
> $KCODE = "n" の場合、日本語文字を一切認識せずにバイト列として扱います。これはデフォルトの動作です。
> オプションとして n, e, s, u のいずれかを指定することで
> 正規表現の文字コードを $KCODE の値に関係なく個々の正規表現リテラルに指定することもできます。

irb> $KCODE = 'u'
irb> p 'うんこ'.split(//)
["う", "ん", "こ"]
irb> p 'うんこ'.split(//n)
["\343", "\201", "\206", "\343", "\202", "\223", "\343", "\201", "\223"]

文字列が完全にASCIIの範疇しか使われないならぶっちゃけいらない
ASCII 文字の処理だからと n をつけまくってる人は時々見るが、つけないほうがいい時のほうが多いと思うんだ
0797デフォルトの名無しさん2009/09/10(木) 07:28:24
thx
文字コードの指定ですか
1.9以降はどうなるんだろ
0798デフォルトの名無しさん2009/09/10(木) 07:43:01
無指定の場合は対象文字列の encoding と同じだとみなす

irb1.9> p "しふとじす".encode('Shift_JIS').split(//)
["??", "??", "??", "??", "??"]
irb1.9> p "しふとじす".encode('Shift_JIS').split(//).map{|e| e.encode('UTF-8')}
["し", "ふ", "と", "じ", "す"]

split(//n) と同じことをするのはやや手間

irb1.9> p "しふとじす".encode('Shift_JIS').dup.force_encoding('BINARY').split(//)
["\x82", "\xB5", "\x82", "\xD3", "\x82", "\xC6", "\x82", "\xB6", "\x82", "\xB7"]

each_byte の結果を文字列にしたほうがたぶん妥当
あるいはなんか凄い人が凄い簡単な手法見せてくれるかもしれない
0799デフォルトの名無しさん2009/09/10(木) 07:46:43
余った文字も入れたけりゃ
N = 2
'abcde'.scan(Regexp.new('.{1,%d}' % N))
=> ["ab", "cd", "e"]
0800デフォルトの名無しさん2009/09/10(木) 09:44:20
>>772はカスタムマッチャ作ればすぐじゃん、と思ったが
「そのメソッドからの $stdout への出力」というのを限定して取れないことに気づいた
$stdout を曲げてる期間に他の何かからも $stdout に出力があれば混じってしまう

や、「テスト中にはそんなこと起こらない」ということにすればいいんだけども
0801デフォルトの名無しさん2009/09/10(木) 10:03:31
module MyCustomMatchers
class MatcherDisplay
def initialize(expected); @expected = expected; end

def matches?(proc)
old = $stdout.dup; out = StringIO.new
$stdout = out; proc.call; $stdout = old
out.rewind
@actual = out.read
return (@actual == @expected)
end

def failure_message
"expected stdout is #{@expected.inspect} but was #{@actual.inspect}"
end

def negative_failure_message
"stdout #{@expected.inspect} should not be same"
end
end

def display(expected)
MatcherDisplay.new(expected)
end
end

describe "Test" do
include MyCustomMatchers
it "say hello" do
lambda{print "hello!"}.should display('hello!')
end
end
0802デフォルトの名無しさん2009/09/10(木) 10:08:20
あ、$stdout を dup する必要ないや
そのへん適当に
あとメッセージも適当
failure_message が should が失敗したときのメッセージ
negative_failure_message が should_not が失敗したときのメッセージ
モジュール作って include 形式にはしなくても構わないがこうしたほうがきっとあとで楽
0803デフォルトの名無しさん2009/09/10(木) 11:01:01
>>785
>何を言ってるんだおまえは
おまえこそ何を言っているんだ。
Ruby初心者では、782で紹介されたページから、ライブラリのドキュメントまでたどり着けないことがあるという事実がわかったんだから、
初心者でも簡単にたどり着けるようなページデザインにするにはどうしたらいいかを話し合ったほうが建設的ではないか?

たとえば
ttp://doc.okkez.net/static/188/doc/index.html
のページを見ると、言語仕様の目次がずらーっと並んでいて、ライブラリのドキュメントへのリンクは後ろのほうにあるだけ。
これだと、>>783のような勘違いが生まれても仕方ない。
そうじゃなくて、このページから目次をなくして、
「言語仕様」「組み込みライブラリ」「標準添付ライブラリ」「その他」
の4つの大きなアイコンが並んでいるだけにすれば、>>783のような勘違いもなくなると思うんだけど、どうだろうか。

・・・という感じで、初心者が必要なドキュメントにたどり着けるようにするにはどうしたらいいかを話し合ってほしい。
せっかくの初心者スレだし。
0804デフォルトの名無しさん2009/09/10(木) 11:22:14
>>803
そこはサイトを作ってる奴が○○○ので仕方ないかと。

いいじゃん、ruby-doc.orgの英語ドキュメント充実してるんだから、そこを見れば。
0805デフォルトの名無しさん2009/09/10(木) 11:39:19
> 初心者でも簡単にたどり着けるようなページデザインにするにはどうしたらいいかを話し合ったほうが建設的ではないか?

こんなチラ裏掲示板で話し合っても全く建設的ではありません。

プロジェクトに提案があるならメーリングリストへ。
0806デフォルトの名無しさん2009/09/10(木) 12:17:33
>>798
unpack("C*").map(&:chr)
0807デフォルトの名無しさん2009/09/10(木) 12:18:13
>>781の時点で見つけられないのはわからないでもない
でも回答があったにも関わらず目に付いた部分しか見ずに探そうとしない>>783ようなのはただのバカだろ
バカの世話までしていたらキリがない
0808デフォルトの名無しさん2009/09/10(木) 12:20:26
each_byteのほうが短かった
0809デフォルトの名無しさん2009/09/10(木) 12:33:10
>>802
テストで標準出力奪うのはやめといたほうが…
テスト自体の出力が混ざるぞ
0810デフォルトの名無しさん2009/09/10(木) 12:43:02
>>809
おう、今まさに混じってるぞ
何が辛いってうっかりメソッド側で p とかしてオブジェクトの中身確かめようとしたら
標準出力に p の結果が混じってテストが失敗すること

warn obj.inspect で逃げてるが display マッチャのコンセプト自体が間違ってたとしか思えん(w
0811デフォルトの名無しさん2009/09/10(木) 13:22:41
>>779
BioRubyを入れるとString#stepが拡張されて
require 'bio'
'abcdef'.step(2){|a| puts a}
ab
cd
ef
とできる。割り切れなければ最後に余りが返ってくる。
まあ、これだけのために使うようなライブラリじゃないし、
マルチバイト文字も使えないけど。
0812デフォルトの名無しさん2009/09/10(木) 14:05:36
>>805
ここだから書き込むやつがいるんじゃないか
わざわざメーリングリストに入って発言なんかするかよ
どうせたいした議論なんかしないんだから。
0813デフォルトの名無しさん2009/09/10(木) 14:11:51
現状このチラ裏でいろいろ書かれているわけだから
それを無視しているメーリングリストの人たちのほうが非建設的
0814デフォルトの名無しさん2009/09/10(木) 14:13:27
>>813
うわぁ
0815デフォルトの名無しさん2009/09/10(木) 14:16:07
本買えばいいじゃんとしか思わない
0816デフォルトの名無しさん2009/09/10(木) 14:25:25
本なんて邪道と思ってるやつもいるからな
おれには理解できんが
0817デフォルトの名無しさん2009/09/10(木) 14:48:21
ri にキャッシュ機能を付加したフロントエンドを被せるとそこそこ快適

refe というリファレンサもあることは知ってるけど使ったことないや。
使ってる人いる? インストールめんどくせ、というイメージなんだが
0818デフォルトの名無しさん2009/09/10(木) 14:54:17
>>817
refe使ってるけど、アーカイブを展開してパス通すだけじゃね?
0819デフォルトの名無しさん2009/09/10(木) 15:42:14
RubyでHTTP caching proxyを作ろうと思うのですが、PerlのHTTP::Proxyに
相当するようなライブラリはないでしょうか?
0820デフォルトの名無しさん2009/09/10(木) 15:51:25
webrickにhttpproxyというのがあるけど、希望に沿えてるかはわからない
0821デフォルトの名無しさん2009/09/10(木) 16:04:16
>>819-820
http://jp.rubyist.net/magazine/?0002-WEBrickProxy
http://doc.okkez.net/static/187/class/WEBrick=3a=3aHTTPProxyServer.html
通信後へのフックしか用意されてないようだから、これを基に手を加える必要がありそう
0822デフォルトの名無しさん2009/09/10(木) 16:23:06
rubyのMLってオナニーメールばかりで気持ち悪い
0823デフォルトの名無しさん2009/09/10(木) 16:43:14
日本語のは、メール自体が少ないから
0824デフォルトの名無しさん2009/09/10(木) 17:39:42
>>772
newgemでbinつき、rspecつきで出力したのが参考になるかも

binのスクリプトのスペックファイルがこんなのになってる
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
require 'tweetswget/cli'

describe Tweetswget::CLI, "execute" do
 before(:each) do
  @stdout_io = StringIO.new
  Tweetswget::CLI.execute(@stdout_io, [])
  @stdout_io.rewind
  @stdout = @stdout_io.read
 end
 
 it "should print default output" do
  @stdout.should =~ /To update this executable/
 end
end
0825デフォルトの名無しさん2009/09/10(木) 17:40:26
あらアプリ名でちゃった。はずかすぃ!
0826デフォルトの名無しさん2009/09/10(木) 17:43:12
>>824
要は出力対象を差し替え可能にしておけってことじゃね

class C
 def initialize(out = $stdout)
  @out = out
 end
 def exec
  @out.print "message"
 end
end
0827デフォルトの名無しさん2009/09/10(木) 17:57:11
どうでもいいけど○○wgetとかwget○○とかってセンスないよね
Wgetクラスとか作っちゃうのもセンスないよね
system("wget #{url}")するよりはマシだけどね
0828デフォルトの名無しさん2009/09/10(木) 18:01:04
ほぼ全員が作ったことがある黒歴史っぽい感じでセンス無くて恥ずかしいよな
OptParserの練習にもなっていいんだぞ、多分
0829デフォルトの名無しさん2009/09/10(木) 18:02:30
センスっていう言葉を使う奴って語彙が乏しいよね
0830デフォルトの名無しさん2009/09/10(木) 18:38:19
open-uri.rbに記述されてる説明なんだけど、誰か訳してもらえませんか。
respond toの意味するところが分かりません。

makes possible to open various resources including URIs.
If the first argument respond to 'open' method,
the method is called with the rest arguments.
■ このスレッドは過去ログ倉庫に格納されています