[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 18:31 / Filesize : 81 KB / Number-of Response : 296
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 18



1 名前:デフォルトの名無しさん [2008/02/22(金) 14:31:31 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.6 の使用を強くお勧めします】

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

29 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:31:43 ]
>>28
フォロー。
Raccはyaccみたいなパーサジェネレータだから、ASTは自分で組む必要がある。

30 名前:デフォルトの名無しさん [2008/02/24(日) 12:47:04 ]
メール送信をしようと思って、
gemsを見たらメール関連のパッケージがたくさんあります
現在一番使われてるパッケージってどれですか?

31 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:19:48 ]
…TMailかな

Rubyだけでもなんとかなると思うけれど

require 'nkf'
mail=<<EOM
From: #{@sender} <#{@from}>
To: <#{@to}>
MIME-Version: 1.0
Subject: #{NKF.nkf('-jM',@subject.tojis)}
Date: #{@now.rfc2822}
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

#{NKF.nkf('-Ej',@body)}
EOM

Net::SMTP.start(@smtp_server,25,@helo_domain){|smtp|
smtp.send_mail(mail, @from, @to)
}

32 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:53:43 ]
テストツールの利用の仕方がよくわかりません

33 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:08:46 ]
>>32
テストの知識がないとだめだよ
ソフトウェアテストをRubyでも行うというツールであって、ソフトウェアテストをRubyでも学べるというツールじゃない

タイミング的に
Rubyスクリプティングテクニック ― テスト駆動による日常業務処理術
ttp://www.oreilly.co.jp/books/9784873113562/
これを持ち出して「ただの初心者本であってテスト駆動云々については書いてないじゃん!」とかDisるのがよいぞ

「Rubyで学ぶテスト入門」とかいうのは需要はあると思うんだけどねえ

34 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:17:54 ]
メソッド間の値の受け渡しのとこにてきとーな値と正しい答えのペアを持ってきて
メソッドが正しく動作するか検証するツールだろ

35 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:20:44 ]
>>33
Rubyを256倍使うための本 極道編
というのがあるこたあるが、2001年というのはこの世界だと古文書だな。


36 名前:デフォルトの名無しさん [2008/02/24(日) 16:39:43 ]
>>32
「Ruby Test::Unit」または「RSpec」でぐぐれ


37 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:40:08 ]
>>29
>Raccはyaccみたいなパーサジェネレータだから、ASTは自分で組む必要がある。
kwsk



38 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:50:50 ]
>>36
そういう話ではないと思われ

39 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:19:48 ]
>>33
「disる」とかいうのやめ

40 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:48:25 ]
>>37
BNFとか書けばASTを完璧に組み上げる
パーサを生成してくれるわけじゃないという意味。
(というかそこまで出来たらコンパイラコンパイラ名乗って
いい気がする)

構文解析である文法規則に還元されたときの
処理は自分で書かないといけない。

41 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:11:50 ]
>>40
それは Racc の説明であって JavaCC ではないという理解で OK?
もしそうなら、JavaCC はASTを自動で作ってくれるの?

42 名前:40 mailto:sage [2008/02/25(月) 00:53:05 ]
ぉk。

JavaCCのことはさっぱり。
ただ>>26の要求にRaccは微妙かなと思って。

43 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 06:21:28 ]
class Foo
 class <<self
 end
end

これの2行目の意味が良く分からないんですが・・・

44 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 06:32:09 ]
>>43
特異クラスの定義
Railsで時々見るな
ttp://www.ruby-lang.org/ja/man/html/FAQ_A5AFA5E9A5B9A1A2A5E2A5B8A5E5A1BCA5EB.html#a6.2e6.20.c6.c3.b0.db.a5.af.a5.e9.a5.b9.a4.c8.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab


45 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:51:44 ]
すいません、クイッククエスチョン。

特異メソッドは特異クラスのサブクラスに継承されるけど
クラスインスタンス変数は継承されないよね?あってる?

46 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:27:47 ]
rhtmlファイルでシンタックスエラーがあるみたいなんですが、どこがエラーか分かりません。
調べる方法があればおしえてください。

47 名前:デフォルトの名無しさん [2008/02/25(月) 11:52:29 ]
ppよりもっとディープなインスペクション(そのインスタンスの
メソッドやプロパティーのリストまで表示したり)をするには
どうしたらいいですか?



48 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:52:45 ]
>>45
そんな感じだったような気がする

>>46
静的なファイルなのなら、コマンドラインからerbやerubyコマンドに渡せばいい
スクリプトで動的に生成されたものにエラーがあるという話なのならちょっと違う

~$ cat test.rhtml
<title>てすと</title>
<h1>Hello, <%= World %>.</h1>

~$ erb test.rhtml
(erb):2: uninitialized constant World (NameError)
~$ cat test.rhtml
<title>てすと</title>
<h1>Hello, <%= "World" %>.</h1>

~$ erb test.rhtml
<title>てすと</title>
<h1>Hello, World.</h1>


49 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:06:33 ]
>>47
よーわからんがここ読め
ttp://www.ruby-lang.org/ja/man/html/Module.html

irb> 'str'.class.instance_methods
["send", "between?", "%", "rindex", "reject", "[]=", "split", "<<",
"object_id", "strip", "size", "singleton_methods", "downcase", "gsub!",
"count", "succ!", "__send__", "downcase!", "intern", "member?", "squeeze!",
...
irb> require 'net/http'
irb> Net::HTTP.instance_variables
["@proxy_port", "@proxy_addr", "@proxy_pass", "@is_proxy_class", "@proxy_user"]

50 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:59:27 ]
#:nodoc: とか #.nodoc: ってなに?

51 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:31:31 ]
ドキュメントなんか書くものか!というRubyistの強い意志

52 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:34:11 ]
>>46
erb -x test.rhtml | ruby -wc
または
erubis -z test.rhtml
つーかここよめ
ttp://d.hatena.ne.jp/kwatch/20080222/1203680051

>>48
それはtest.rhtmlを実行しているだけなので、シンタックスエラーのチェックには向かない。


53 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:42:14 ]
ハッシュを使い回すのではなく、俺用データのクラスを作ろうと思いました
def initialize の中で、インスタンス変数を
@hoge=nil
@hage=nil
@fuga=nil
...
と15個くらい書いてるんだけど、initializeの時点でnil入れておくって無意味だよね?

54 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:22:09 ]
@hogeの使途が分からない俺たちにとってnilを入れておく事に意味が有るか無いかは判断できない

@ary = []
@ary.each{|e| p e}
ってやれば何も出力されないけど

@ary = nil
@ary.each{|e| p e}
ってやるとnilでっせって怒られる

いきなり
@ary.each{|e| p e}
ってやると@aryなんて知りまへんでって怒られる

俺は1番目を良く使うけどね

55 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:39:29 ]
>>54
自分でそのコード実行してみた?

56 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:42:47 ]
irb(main):001:0> nil.each{|e| p e}
NoMethodError: undefined method `each' for nil:NilClass
from (irb):1
from :0
irb(main):002:0> @hoge.each{|e| p e}
NoMethodError: undefined method `each' for nil:NilClass
from (irb):2
from :0
irb(main):003:0> @hoge = []
=> []
irb(main):004:0> @hoge.each{|e| p e}
=> []

57 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:51:17 ]
>>54
>いきなり
>@ary.each{|e| p e}
>ってやると@aryなんて知りまへんでって怒られる
インスタンス変数でなくローカル変数の場合はその通りなのだが
未初期化のインスタンス変数を参照した場合は nil となるはず

>>53
上記のことを踏まえての質問ということでおk?
やってもやらなくてもnilが入っているという意味ではその通りかも知れないが
クラスで用いるインスタンス変数を明示的に示しておくという意味では無意味ではないと思う



58 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:53:56 ]
>>55
インスタンス変数は「定義」しなくてもnilだってのは忘れられがちだよな

インスタンス変数の「定義」をinitializeでする意味はRuby的にはあまりないと思う

59 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:59:02 ]
厳密にはメソッドが追加されるからただの定義ではないけど attr_reader とか


60 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:59:28 ]
外部からアクセスされるなら直後のattrに名前が出るし
外部からアクセスされないインスタンス変数って一体

あ、サブクラスからアクセスしたいか

61 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:23:53 ]
>>60
外部からアクセスされないインスタンス変数はあっても全然おかしくないと思う
むしろすべての実装を外部からアクセスできるように公開する方がまずいのでは

62 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:28:17 ]
インスタンス変数は外部からアクセスしたいときにのみおもむろに使え、ということなのでは
それ以外ではメソッド引数とかで細々とやれと

63 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:42:22 ]
Rubyのスコープはちょっといろんな言語と違うからね

a = 100
def foo()
return 1 + a
end
foo()
とすると何がかえってくると思う?aが定義してないってエラーになるんだぜ

64 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:43:47 ]
こういうときはaを@aに変えるのが定石

65 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:08:26 ]
>>63
そもそもの問題として、メソッド定義の中以外にローカル変数なんて置くなよ…

66 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:16:55 ]
トップレベルに定義したメソッドなんだろ

トップレベルのローカル変数は特別扱いしてくれてもいいような気もするけどな

67 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:06:31 ]
でもnilの特別扱いは要らない…



68 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:25:56 ]
irb(main):001:0> a=[0,1,2]
=> [0, 1, 2]
irb(main):002:0> [a]
=> [[0, 1, 2]]
irb(main):003:0> [*a]
=> [0, 1, 2]
irb(main):004:0> [3,4,5,*a]
=> [3, 4, 5, 0, 1, 2]
irb(main):005:0> [*a,3,4,5]
SyntaxError: compile error
(irb):5: syntax error, unexpected ',', expecting ']'
[*a,3,4,5]
^
from (irb):5

4行目は良いのに5行目はダメっていう挙動が理解できないんだが・・・


69 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:59:48 ]
>>68
*arrの「うしろ」に置けないだけ
先頭に書けないんじゃなくて、展開後にも何かがあると文法エラー

irb> a = [1, 2, 3]
[1, 2, 3]
irb> [9, 8, *a, 7]
SyntaxError: compile error


70 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:01:21 ]
ていうか、もしかして *array を「arrayの要素をバラす表現」とかいう理解をしてる?

71 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:06:23 ]
1.9なら通るよ

72 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:04:14 ]
自作プログラムをクラスごとにファイルに分けると20ファイルくらいになる
「ああ、実行するたびに20回もHDDにアクセスしてるんだ」と考えると憂鬱になる

ということで開発用ディレクトリと実行用ディレクトリを分けた
実行用ディレクトリには開発用ディレクトリにあるスクリプトを連結したものを入れてる
これならファイルアクセスの回数は数回で済む

いや標準添付のクラスとかrequireしてる時点で何個もファイル読み込みまくってるのはわかってんだけど

73 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:55:41 ]
>>72
その最適化で何秒早くなったの?

74 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:57:22 ]
時間が問題だと思ってる?

75 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:03 ]
>>74
>>72はそういうことを言いたいわけではないと思われ

76 名前:75 mailto:sage [2008/02/26(火) 22:17:55 ]
>>72じゃなくて>>73だorz

77 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:30:19 ]
>>72は一言も最適化とは言ってないな。




78 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:34:14 ]
ディスクアクセスが無意味に多いのが心情的に嫌なのだろう
そう感じるセンスそのものは悪くはない

79 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:28:06 ]
無意味に多いのかそれは、とか
全部動かさずにユニットテストしろよ、とか

80 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:49:05 ]
要するにプリコンパイルヘッダーが必要ということか?

81 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:45:24 ]
C++ とかやると、コンパイル時にいくつヘッダ読んでるかなんて
全く気にならなくなるZE

82 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:05:29 ]
コンパイル時(>>72の例だと開発中)はどうでもいいんだが、実行時に、というのが心情的に気持ち悪いという話だろう。

83 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:26:02 ]
なら、コンパイル系の言語を使えばいいんじゃまいか?

84 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:54:36 ]
そんな読み込み程度を気にするのがいかにも初心者だな

85 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:55:55 ]
Ruby使いはお茶でも飲んでまたーりするがよい
わっはっはっは

86 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:06:07 ]
>>84
そうか?
「それ自身は事実だから好きにせえ」以外の必死な否定論が出ることのほうがよっぽど初心者だと思うが…

87 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:07:32 ]
ところでCが書けないRuby書きはニワカだと思いますがどうですか。



88 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:13:07 ]
I/O を工夫することはパフォーマンスチューニングでは基本事項。
もとの環境や条件が不明だけど、CGIのようにリクエストのたびにプロセスを
実行しなきゃいけない場合は、読み込み速度を工夫するのは別におかしな話ではない。
ファイルサイズが小さくても、ファイルの数が多ければハードディスクのシークタイムは
バカにならない。
ただ、ファイルを連結しても断片化してたら効果は少ないから、デフラグを
ちゃんとやってやる必要があるけど。

89 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:17:28 ]
もうそんな時代でもないんだけどな

90 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:24:31 ]
>>89
ストレージへのアクセスが問題にならないコンピュータができたならぜひ教えてくれ

というか最近の子は「HDDがガリガリ言う」とか気にしないもんかね
静音化されて意識しなくなったんだろうか

91 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:29:29 ]
HDDはアクセスすると壊れるからなあ
いや、こんなんで壊れる確率がはっきり増えるHDDってのもかなりアレだが…

とりあえず
「クラス単位の細切れファイルをインストール時に数個にまとめとく」
というのは別に非難されるようなことじゃないと思うぞ
というかそんなにまでして行為そのものを否定する理由を知りたい

92 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:30:48 ]
ガリガリ言うほどのアクセスを問題にしてるのか?
そもそもそんなこと言ってたらRubyなんて選択肢にならんだろ

93 名前:デフォルトの名無しさん [2008/02/27(水) 12:32:34 ]
鈍足のRubyを使う人は達観した境地にあるので小さいことは気にしない

94 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:57:19 ]
正直、完全に論点がずれてるような気がしてならない。
元発言は、無駄を嫌うというプログラマの美徳を発揮してるだけじゃないの?

95 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:04:35 ]
チューンナップを突き詰めるとRuby使うなになるからおすすめしない

96 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:08:02 ]
Railsみたいな糞のかたまりで遊ぶのがRubyistだからな

97 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:16:36 ]
Railsのナカミを喜んでる人は少数だと思う

Railsは開けないほうがよい箱だ
あくまで外部から自分のために便利に使うシステム



98 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:42:30 ]
これが SyntaxError になるんだけど何故でしょうか?

def foo?; end
def bar?; end

case
when not foo?
when not bar?
end


99 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:52:00 ]
>>94
まぁ、美意識の問題だわな。
そしてそれは、そんな変なエネルギーってわけではない。

100 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:15:48 ]
>>98
notだから。

case
when (not foo?)
when (not bar?)
end



case
when ! foo?
when ! bar?
end

なら期待通りに動く

101 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:16:13 ]
>>98
この辺の話かな
ttp://www.ruby-lang.org/ja/man/html/trap_A4C7B2F2B7E8A4B9A4EBA4E2A4CE.html

when (not foo?)
ならおkのはず

102 名前:デフォルトの名無しさん [2008/02/27(水) 18:42:53 ]
[標準出力へのフックを仕込む]
標準出力に出力
標準出力に出力
標準出力に出力
[標準出力に書き出した内容をメールで送信]
ってやりたいんですが、
どうやったら出来ますか?

103 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:55:07 ]
出力時にスコープの広い変数に文字列を追加保存しとけばいいじゃん?

104 名前:98 mailto:sage [2008/02/27(水) 19:02:54 ]
>>100, >>101
なるほど。
てっきり「not foo?」は「式」かと思っていたんですが、「文」なんですね。
了解しました。深いっす。

105 名前:デフォルトの名無しさん [2008/02/27(水) 19:12:13 ]
phpでいうis_array()はどうやればいいですか?
rubyは配列もあるしハッシュもあるし、自分でコレクションも作れるしで
どう判定していいのか分かりません(?o?)

106 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:17:02 ]
[0,1,2].is_a?(Array) #=> true
[0,1,2].kind_of?(Array) #=> true

ArrayクラスはObjectクラスを継承している。
だからArrayクラスはObjectクラスのクラスメソッドやインスタンスメソッドも使える。
Objectクラスのリファレンスをみるべし。
www.ruby-lang.org/ja/man/html/Object.html


107 名前:デフォルトの名無しさん [2008/02/27(水) 19:30:43 ]
>>106
ありがとうございます
試してみたところ、PHPとは異なり、
ハッシュと配列は明確に区別されているようですね
ハッシュ.is_a Array → false
配列.is_a Hash → false



108 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:34:50 ]
オブジェクト、実際的には変数、が配列かどうかを調べなければならないコードというのはRubyではかなり異常
極力他のアプローチを取るようにしたほうがいい

109 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:40:03 ]
case arg
when Array
when Hash
とかよくやるじゃん

110 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:42:06 ]
そうですか(><)
YAMLで書いた設定ファイルを読んで
該当キーをeachで回すようにしてるんですが、
キーを省略した時にはnilになりますよね。
nilをeachしたらエラーになるので、eachできるかどうかを調べてから
eachしたいのですが、
こういう場合はruby的にはどう書くものですか?

111 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:14 ]
>>110

・ 変数がnilかどうかを事前にif文で比較して弾く
・ eachでnilが例外エラーを起こしたらその例外をキャッチする

どっちか好きなほう使え

112 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:32 ]
def hoge(foo, bar)
 raise ArgumentError unless foo.is_a?(String)
 raise ArgumentError unless foo.is_a?(Array)
 ・
 ・
 ・
end
とかメソッドの最初でモリモリやっちゃうのはだめ?

113 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:58:48 ]
>>112
わりと下品。

まあ、それ以上でもそれ以下でもない程度かと。
コレを無くすために悩む時間がえらい長引くってんならあっても仕方ないんじゃね。おいおい考え変えていけばいいかと。
そのクラスやメソッドに本当にそんなクラスのインスタンスが指定されることがあるのか? をよく考えるといい。
標準添付で「結果の数によってStringあるいはArrayが返ります」とかいうメソッドがあるかい?

…そういえばなんか添付モジュールで複数のクラスが返ってくる可能性のあるやつあった気がするがまあいいや。

「Stringが来たときはHashに変換しよう」とかいうのも同様。Stringなんか渡してくる奴が悪い、で桶。
raaやgemで公開して育てる気マンマンでちまちまフールプルーフさいこー、という場合はあったほうがいいのかも。

114 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:07:48 ]
日本語がよくわからない

115 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:35:03 ]
>>102
require 'stringio'
# 標準出力へのフックを仕込む
$stdout = StringIO.new
# 標準出力に出力
puts '未承諾広告'
puts 'こんにちは^^)'
#
# 標準出力に書き出した内容を
$stdout.rewind
text = $stdout.read
メールで送信(text)

116 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:42:15 ]
>>115
ぬう、適切だが邪悪だ…

117 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:45:13 ]
>>110
eachに反応するときだけeachしたいなら、
respond_to? :each する。

と思ったことが私にもありました。

なんでStringがeach持ってるんだよ……(1.8での話)





118 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:48:51 ]
>>116
標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w

使い方自体は巻き戻せるIOの正しい使い方
$stderrに仕込んでおくとwarnの出力をロギングできるぞ
warn使ってる人ってあんまり見ないけどな

>>117
eachの中でArrayやHashという構造べったりの処理をするからあまり意味がなかったり…

119 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:52:27 ]
STDOUTに元の残ってるし、
writeメソッドがないとTypeErrorだし、
邪悪っていうにはおとなしい希ガス。
バッドノウハウなのは確かだけど。

120 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:24:04 ]
>>118
>標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w
そんなことないだろ
なんで邪悪なのか説明してみな

121 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:08:29 ]
Herokuってどうよ

122 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:40:13 ]
>>120
出力先が固定になってるあたりかな。


123 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:02:13 ]
なんでパイプしてその先でメールするんだと
駄目なんだろ。

124 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:06:51 ]
>>122
それだけじゃわかんね。固定してたらなぜだめなの?

125 名前:デフォルトの名無しさん [2008/02/28(木) 13:16:13 ]
標準出力をフックしたい⇒出力先が固定
意味不明だな。

126 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:20:35 ]
なんかのはずみで標準出力に出るようなものも全部キャプチャしたいなら
すなおに別プロセスで読み出せ

127 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:07:34 ]
こんなもんでいいんじゃね

class Dummy
@@origout = $stdout

def initialize
@buf = ''
end

def write(str)
@@origout.write(str)
@buf << str
end

def flush
tmp = @buf
@buf = ''
tmp
end
end

$stdout = Dummy.new
puts "hello"
puts "world"
$stderr.puts $stdout.flush.inspect

思い切り誤爆してきた。。。




128 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:43:56 ]
>>126
なんで別プロセスにするのがいいの?
$stdout = StringIO .new
だとなんか問題あるの?

129 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:47:47 ]
>>118 バカ
>>122 バカ
>>126 バカ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<81KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef